Skip to main content

Full text of "P.S.I. - La decouverte de l'Oric (Oric-1 et Atmos)"

See other formats











| 
EDITIONS DU PS.I. 


la découverte de l’ 


(ORIC-1 ét ATMOS) 


daniel-jean david 





La découverte de 
L'ORIC:1 et ATMOS 


La collection « MATERIELS » s'intéresse à l'utilisation de tel ou tel type d'ordinateur, depuis la 
première prise de contact jusqu'à l'utilisation la plus pointue. 


La découverte de l'Apple Il — Frédéric Lévy et Dominique Schraen 

Exercices pour Apple Il — Frédéric Lévy 

La pratique de l'Apple II — tomes 1 et 2 — Nicole Bréaud-Pouliquen 

La pratique de l'Apple Il — tome 3 — Nicole Bréaud-Pouliquen et Daniel-Jean David 


La découverte du Commodore 64 — Daniel-Jean David 

La pratique du Commodore 64 — tome 1 — Daniel-Jean David 

La découverte du Dragon — Frédéric Lévy et Dominique Schraen 
Dragon tout feu tout flammes — Trévor Toms et John Phipps — traduit par Olivier Arnaud 
La découverte du FX-702 P — Jean-Pierre Richard 

Exercices pour Goupil — Yves Martin 

Programmer HP-41 — Philippe Deschamps et Jean-Jacques Dhénin 

La découverte du PB-100 — Pierrick Moigneau 

La découverte du PC-1251 — Jean-Pierre Richard 

La découverte du PC-1500 — Jean-Pierre Richard 

Le petit livre du Spectrum — Trévor Toms — traduit par Allan Keil 
Exercices pour Spectrum — Julien Lévy 

La pratique du Spectrum — tome 1 — Xavier Linant de Bellefonds 

La pratique du Spectrum — tome 2 — Marcel Henrot 

La découverte du T07 — Dominique Schraen et Maurice Charbit 
Exercices pour TRS-80 — Frédéric Lévy 

Les graphiques sur TRS-80 — Donn Inman — traduit par Alain Pinaud 
La découverte de la TI 57 — Xavier de la Tullaye 

La découverte du TI-99/4A — Frédéric Lévy et Dominique Schraen 
Exercices pour TI-99/4A — Frédéric Lévy 

La découverte du VIC — Daniel-Jean David 

La pratique du VIC — tome 1 — Daniel-Jean David 

Le petit livre du ZX-81 — Trévor Toms — traduit par Ghislaine Lapeyre 
La pratique du ZX-81 — tome 1 — Xavier Linant de Bellefonds 

La pratique du ZX-81 — tome 2 — Marcel Henrot 

La découverte de l'Oric — Daniel-Jean David 

La découverte de l'Alice et MC/10 — Maurice Charbit 


Autres ouvrages relatifs à l'ORIC-1 : 


— ORIC pour tous — Jacques Boisgontier et Sophie Brébion 
— 52 programmes pour tous, ORIC — Jacques Boisgontier 


RAPPELS 


Les séries : 


En fait, il faudrait parler de niveaux, puisque la couleur attachée à chaque ouvrage permet de 
situer la «force» de celui-ci selon le code suivant : 


Série VERTE : ouvrage d'initiation ne nécessitant que des connaissances de base. 
Série BLEUE : suppose une connaissance élémentaire du sujet traité. 

Série ROUGE : ouvrage d'approfondissement, niveau de complexité moyen. 

Série NOIRE : ouvrage d'approfondissement, niveau de complexité élevé. 


Les collections : 
Les ouvrages d'Edition du PSI, actuellement une centaine, sont répartis en collections : 


« LANGAGES », « MATERIELS », « PROGRAMMES », « GUIDES PRATIQUES », « MEMEN- 
TOS », « UTILISATIONS DE L'ORDINATEUR », « LOGIGUIDES » et pour l'initiation, outre 
quelques livres hors collection, «.… POUR TOUS ». 


La loi du 11 mars 1957 n'autorisant, aux termes des alinéas 2 et 3 de l'article 41, d'une part, que les « copies 
ou reproductions strictement réservées à l'usage privé du copiste et non destinées à une utilisation collective », 
et, d'autre part, que les analyses et les courtes citations dans un but d'exemple et d'illustration, «toute 
représentation ou reproduction intégrale, ou partielle, faite sans le consentement de l'auteur où de ses ayants 
droit ou ayants cause, est illicite» (alinéa 1°’ de l'article 40). 


Cette représentation ou reproduction, par quelque procédé que ce soit, constituerait donc une contrefaçon 
sanctionnée par les articles 425 et suivants du Code Pénal. 


© Editions du P.S.I. B.P. 86 — 77402 Lagny Cedex 1984 
ISBN : 2-86595-109-X 


La découverte de 
L’ORIC:1 et ATMOS 


par 
Daniel-Jean David 





Fe 


Editions du P.S.I. 
1984 


LA DECOUVERTE DE L'ORIC 


Daniel-Jean DAVID enseigne l'informatique de gestion 


s 


à l'Université de Paris-1 Panthéon Sorbonne. 


Par ailleurs, il enseigne l'utilisation des micropro- 


cesseurs à L'E.N.S.A.M. 


Ses sujets de recherche vont de l'informatique graphi- 
que aux techniques d'interface des microprocesseurs et 


des systèmes multi-processeurs. 


Spécialiste du microprocesseur 6508, il a donné, à 
Paris, de nombreux séminaires sur les microprocesseurs, 
le KIM, le SYM et le P.E.T. 


Il est directeur de la publication de "La Commode", 
revue trimestrielle consacrée aux ordinateurs Commodore, 


Atari et Oric. 


LA DECOUVERTE DE L'ORIC 


SOMMAIRE 


Pages 

Présentation. ts one nement à 7 
CHAPITRES 
1 Prise dé: Contact. sis sas asser at ralens de te 9 
2 Instructions fondamentales................ 21 
je) Commandes fondamentales................... 31 
4 Bases de la programmation................. 49 
5 Programmation évoluée..................... 71 
6 Courbes, graphiques haute résolution...... 87 
7 Programmes graphiques élaborés............ 109 
8 Effets; SOnOres. ; 2 asus enr ete de 133 
ANNEXES 
I : Fonctions et mots-clé du Basic.......... 141 
II : Répertoire des instructions et des 

Opérateurs. Bas le... sise dan su tte 144 
III. ;: Messages d'erreur... snssissss der 151 
IV : Questions et réponses................... 154 
V :. Solutions des eéxerciloes sie Su sers ends 158 
Bibliographie 175 


LA DECOUVERTE DE L'ORIC 


PRESENTATION 


Ce livre a pour but de vous permettre de tirer le 
meilleur parti possible de votre micro-ordinateur ORIC. 
Après une introduction formée de rappels généraux sur 
l'informatique, il comprend essentiellement une intro- 
duction progressive au langage Basic, qui est le langage 
de programmation utilisé le plus souvent sur L'ORIC. 


Bien entendu, on y exploite au maximum les particula- 
rités de Ll'ORIC. La structure de cette partie est conçue 
pour permettre l'acquisition progressive des connais- 
sances : elle est formée de chapitres, ou plutôt de 
séries. 

Dans chaque série, on bâtit petit à petit un program- 
me, par väartations continues, en introduisant peu à peu 
les notions nouvelles. 


Il est recommandé au lecteur de bien suivre cette pro- 
gression, d'essayer réellement sur son ORIC les diffé- 
rentes versions des programmes, et même d'en imaginer 
d'autres. 


C'est la condition nécessaire d'acquisition de connais- 
sances durables. Toutefois, ce livre devrait aussi per- 
mettre aux personnes qui n'ont pas encore d'ORIC de se 
faire une idée des possibilités de cet ordinateur. 


Enfin, l'ouvrage se termine par des annexes où sont 
fournies des informations de référence : explication de 
chaque instruction Basic, messages d'erreurs, points 
particuliers traités sous forme de questions et de ré- 
ponses. 


Dernière précision : tous les programmes cités ont 
été réellement essayés au clavier d'un ORIC. 


Les exemples de ce livre qui sont purement en Basic 
sont ausst valables pour Ll'ATMOS. 


LA DECOUVERTE DE L'ORIC 


CHAPITRE | 
PRISE DE CONTACT 


LE MESSAGE “47870 BYTES FREE" 
BITS, OCTETS, INFORMATIONS 


À peine vous êtes-vous assis devant votre ORIC et 
l'avez-vous mis sous tension qu'il affiche "47870 BYTES 
FREE'"(1) dont la traduction est : "47870 OCTETS LIBRES". 
Que sont donc ces "OCTETS'" dont on vous annonce qu'ils 
sont "LIBRES" ? 


Pour comprendre - et nous nous en excusons - il nous 
faut voir un certain nombre de notions. Nous essaierons 
d'être brefs. L'ORIC est un ordinateur, c'est-à-dire 
une machine de traitement automatique des informations. 
On conçoit que les ordinateurs aient un champ d'applica- 
tions extrêmement vaste puisque, en définitive, toute 
activité humaine se ramène à un certain traitement d'in- 
formations. 


Une des opérations essentielles que l'ordinateur doit 
pouvoir effectuer sur une information est de la mémori- 
ser, pour être capable de l'utiliser à différents mo- 
ments. Mais la mémorisation de l'information implique 
sa mise sous une forme physique convenable pour pouvoir 
être stockée dans les circuits de l'ordinateur. 


(1) Le nombre indiqué est plus petit sur le modèle 16K (15103). 


LA DECOUVERTE DE L'ORIC 


Dans l'état actuel de la technologie, le seul codage 
pratique est de type binaire, car on sait très bien réa- 
liser des éléments capables de prendre deux états bien 
distincts, par exemple : présence ou absence d'un trou 
sur une carte, élément de bande magnétique aimanté 
dans un sens ou dans l'autre, élément de circuit élec- 
tronique porté au potentiel 5 V, ou restant à 0 etc. 


Un tel élément qui, en tant qu'information est en 
somme capable de contenir la réponse par oui ou par non 
à une certaine question s'appelle un BIT (abréviation 
anglaise de "chiffre binaire" : Binary Digit). 


Mais un seul bit forme le plus souvent une information 
trop élémentaire à manipuler de façon pratique. C'est 
pourquoi on manipule généralement des groupes de bits. 
Le groupe le plus souvent envisagé est le groupe de 
8 bits ou OCTET. Pour comprendre ce que signifie "en 
avoir 47870 de libres", il nous faut maintenant voir ce 
que l'on peut représenter avec un octet, c'est-à-dire 
quelles informations peuvent être enfermées dans un 
octet. 


Pour visualiser un octet sur le papier, il nous faut 
introduire deux symboles correspondant aux deux états 
que peut prendre chaque bit de l'octet. Si nous prenons 
pour symboles 0 et 1, un octet pourra être, par exemple, 
01000001 ou 10100101 ou encore 01101001. Notons tout de 
suite que, comme on a deux possibilités pour chaque bit, 
on à 2° = 256 possibilités différentes pour un octet. 


Maintenant, si nous voulons qu'un octet représente un 
nombre, c'est très facile. Il suffit de considérer que 
l'on a exprimé le nombre dans le système de numération 
binaire (à base 2). Ainsi, par exemple, 01000001 vaudra 
1 + Ox2 + Ox2? + Ox2? + Ox2* + Ox25 + 1x2 + Ox27 = 
1 + 64 = 65. De la même façon qu'en décimal 1702 vaut 
2 + Ox10 + 7x10? + 1x10. Chaque bit représente un chif- 
fre du système binaire, d'où son nom. Le nombre le plus 
petit que l'on puisse représenter est 00000000 (0) ; 
le plus grand est 11111111 (255) : on retrouve les 256 
combinaisons. On voit aussi une chose : comme on veut 
pouvoir manipuler des nombres plus grands que 255, il 
faudra quelquefois que les nombres occupent plusieurs 
octets. 


Peut-on ranger autre chose que des nombres dans un oc- 
tet ? Bien sûr ! Supposons qu'on décide que 01000001= A, 
01000010 = B etc. pour toutes les lettres. Là encore, 
on peut avoir un jeu de 256 caractères différents, ce 
qui permet les lettres majuscules et minuscules, les 
chiffres, les caractères de ponctuation et bien d'autres. 


10 


LA DECOUVERTE DE L'ORIC 


On pourra alors stocker n'importe quel texte dans la 
mémoire, à raison d'un caractère par octet. 


On peut donc ranger un texte de 47000 caractères dans 
la mémoire de l'ORIC, soit trente pages de ce livre. 
Cela vous donne maintenant une meilleure idée de ce que 
nous avons comme mémoire. 


Mais il y a encore une autre catégorie d'informations 
qui doivent entrer dans la mémoire, et c'est même une 
caractéristique fondamentale des ordinateurs. En effet, 
un ordinateur a besoin, pour fonctionner, d'instructions 
qui lui disent ce qu'il a à faire. Ces instructions con- 
venablement codées résident en mémoire, au même titre 
que les informations à traiter ; de façon analogue, un 
employé qui effectue des calculs de comptabilité n'a-t- 
il pas en mémoire la liste des opérations qu'il doit 
effectuer à côté des chiffres qu'il doit manipuler ? 


LA CONFIGURATION DE L'ORIC 


La mémoire n'est qu'une partie de la configuration 
dont on dispose avec l'ORIC. Sur les gros ordinateurs, 
on distingue facilement, car ils occupent chacun une ar- 
moire, les éléments principaux qui sont l'unité centrale 
(où s'effectuent les traitements) et les périphériques 
qui servent à communiquer avec le monde extérieur (no- 
tamment saisir les données à traiter et fournir les ré- 
sultats obtenus). 


Les mêmes éléments existent sur l'ORIC. Extérieurement, 
on ne voit que les périphériques : 


- Le clavier : qui va nous servir à entrer des données 
et des instructions ; 


- L'écran de télévision : sur lequel s'afficheront les 
résultats (28 lignes de 38 caractères). Le couple cla- 
vier/écran est l'instrument du dialogue entre vous et 

votre machine ; 


- L'unité de cassettes magnétiques : À la différence des 
périphériques de communication précédents, il s'agit 
plutôt d'un périphérique de stockage ou mémoire de masse, 
qui permet de stocker des programmes ou des données si 

la mémoire centrale est insuffisante. Mais la cassette 
est aussi un périphérique de communication entre ORIC 
vous pouvez envoyer un programme ou des données sur cas- 
settes à un ami, qui possède aussi un ORIC. 


11 


LA DECOUVERTE DE L'ORIC 


L'unité centrale est cachée, mais elle existe et elle 
est en fait formée de deux éléments : le processeur et 
la mémoire centrale. 


- Le processeur est ici un microprocesseur, c'est-à-dire 
un circuit intégré à grande échelle capable, à lui seul, 


de commander tout le système : il cherche en mémoire 
les instructions successives, les interprète et les exé- 
cute ; il envoie aux autres composants du système les 


ordres nécessaires. Dans le cas de Ll'ORIC, le micropro- 
cesseur est un 6502 de MOS Technology, un des plus ef- 
ficaces du marché. 


- La mémoire. Les 47000 octets vus précédemment n'en 
sont qu'une partie. C'est en fait 80000 octets de mémoi- 
re qui sont présents. (Les informaticiens disent 80K où 
K = 2 = 1024). Parmi les 80K, 16K sont de la ROM (Read 
Only Memory), mémoire écrite une fois pour toutes, en- 
core appellée Mémoire Morte ou MEM, qui contient les 
programmes invariables permettant à l'ORIC de se mettre 
au service de l'utilisateur (c'est le système d'exploi- 
tation que nous présentons plus en détail à la section 
suivante). Les 64K restants sont de la RAM (Random Ac- 
cess Memory), c'est-à-dire de la mémoire que l'on peut 
lire ou écrire (ou Mémoire Vive MEV). Elle contient les 
programmes de l'utilisateur et les données variables. 
Seuls 48K en sont accessibles et l'ORIC en réserve 1lK 
pour son usage, d'où les 47K restant libres pour l'uti- 
lisateur. Il faut encore en retirer 1K ou 8K selon le 
mode d'affichage basse ou haute résolution, pour la mé- 
moire d'écran. 


La figure 1 donne une vue synoptique de la configura- 
tion de l'ORIC. Nous avons maintenant complètement in- 
terprété "47870 BYTES FREE". Il nous faut maintenant 
expliquer la ligne "ORIC EXTENDED BASIC V 1.9" qui le 
précède. Ce sera le but de la section suivante. 


Clavier 










Cassette 







Connecteurs 
pour extensions 


Microprocesseur 6502 
RAM 
16/64K 


Figure 1 - Synoptique de l'ORIC 





12 


LA DECOUVERTE DE L'ORIC 


PROGRAMMES -— SYSTEME D'EXPLOITATION - BASIC 


On vient de voir que le microprocesseur, pièce maî- 
tresse de l'unité centrale était capable de chercher en 
mémoire les instructions successives, de les décoder et 
d'y obéir. De fait, il n'est capable que de cela ! En- 
suite, pour obtenir quoi que ce soit de l'ordinateur, il 
faudra lui fournir les instructions convenables. Sans 
instructions précises, l'ordinateur ne sait rien faire, 
il n'a aucune initiative. 


Une suite d'instructions que l'ordinateur doit exécu- 
ter successivement s'appelle un programme. Fournir une 
telle suite d'instructions permettant de résoudre un 
certain problème s'appelle programmer. 


Vous concevez donc que vous allez devoir fournir des 
programmes à votre ORIC, que vous introduirez par le 
clavier. Mais, pour que l'ORIC prenne en compte ce que 
vous frappez au clavier, il faut qu'il ait un programme 
qui le lui ordonne. Il n'aurait pas tout seul l'initia- 
tive d'aller voir si quelqu'un tape sur le clavier... 


Heureusement, nous n'avons pas à écrire ce programme. 
En effet, l'ORIC - comme d'ailleurs tout autre ordina- 
teur - est livré avec un ensemble de programmes fonda- 
mentaux qui sont indispensables à son utilisation : pro- 
gramme qui lit le clavier, programme qui affiche sur 
l'écran, programme qui gère les cassettes, programme qui 
attend les instructions de l'utilisateur etc. L'ensemble 
de ces programmes s'appelle le système d'exploitation. 


Ces programmes résident en ROM, afin d'être conservés 
en permanence pour être disponibles dès qu'on met 1'ORIC 
sous tension. Le message qui s'affiche sur l'écran dès 
cette mise sous tension est une manière de dire à l'uti- 
lisateur que le système d'exploitation se met à sa dis- 
position et attend ses ordres. 


Une composante très importante du système d'exploita- 
tion de Ll'ORIC est lL'interpréteur Basic qui va nous per- 
mettre de fournir des instructions à l'ORIC sous une 
forme commode pour nous. 


La question se pose en effet de savoir sous quelle 
forme - ou en quel langage - nous devons fournir nos 
instructions à l'ORIC. À dire vrai, un ordinateur ne 
"comprend" qu'un seul langage, le langage-machine ou bi- 
naire. 


13 


LA DECOUVERTE DE L'ORIC 


Par exemple, en langage-machine de l'ORIC, "ajouter 2 

et 3" se dirait 10101001 00000010 00011000 01101001 000 
00011 10000101 01010000 ... C'est extrêmement compliqué 
à comprendre et à utiliser pour l'homme ! C'est pourquoi 
d'autres langages de programmation ont été inventés, 

qui s'appellent langages évolués et sont plus proches 

du langage humain, plus proches des notations mathéma- 
tiques usuelles, et donc plus faciles à utiliser. Dans 
un tel langage, "ajouter 2 et 3" se dirait, par exemple, 
À = 2+3 ; c'est beaucoup plus compréhensible, n'est-ce 
pas ? 


Basic est l'un de ces langages évolués, le plus répan- 
du à l'heure actuelle sur les PSI (Petits Systèmes Indi- 


viduels). C'est probablement le plus simple à utiliser 
pour les débutants : son nom est l'abréviation de Begin- 
ners' All-purpose Symbolic Instruction Code = codage 


symbolique des instructions d'usage général pour les 
débutants. 


C'est lui que nous utiliserons sur l'ORIC, mais nous 
ne pouvons le faire sans l'aide d'un programme du sys- 
tème d'exploitation. En effet, L'ORIC ne comprend vrai- 
ment que son langage-machine ; il faut donc un programme 
du système d'exploitation qui prenne chaque instruction 
de notre programme Basic et la traduise en Binaire pour 
l'exécuter : c'est le rôle - essentiel - joué par l'in- 
terpréteur Basic. 

En résumé, l'affichage qui apparaît sur l'écran à la 
mise en route signifie : l'interpréteur Basic du système 
d'exploitation est à votre disposition - vous disposez 
pour votre programme Basic et vos données de 47870 oc- 
tets libres. Le dernier mot "Ready" qui réapparaîtra à 
chaque fois que l'ORIC aura terminé une commande signi- 
fie "Je suis prêt et j'attends que vous tapiez la pro- 
chaine instruction". 


Faisons-le... 


LES DEUX MODES DE FONCTIONNEMENT DE BASIC 


Mettons-nous au clavier et tapons 
BONJOUR ORIC ‘Return! 


(Tout message tapé par l'utilisateur se termine en prin- 


cipe par la touche 'Return' - retour chariot -. Dans la 
suite, nous cesserons progressivement de la faire figu- 
rer : elle sera sous-entendue et devra être tapée). 


14 


LA DECOUVERTE DE L'ORIC 


L'ORIC répond : 
2SYNTAX ERROR 


En effet, bien que notre message soit très poli, il 
ne forme pas une instruction Basic correcte, et par 
suite, l'ORIC (ou plutôt l'interpréteur Basic) la re- 
fuse. 


Il ne faut pas faire de complexes à propos des messa- 
ges d'erreur, mais chercher calmement l'erreur que l'on 
a faite ; le comportement de la machine est, dans tous 


, 


les cas, parfaitement rationnel. L'ORIC a tout un réper- 
toire de messages d'erreurs qui n'ont pas d'autre but 
que celui de nous aider à les corriger. 


Tapons maintenant 
2'BONJOUR!JE SUIS L'ORIC'" ‘Return! 
(les espaces s'obtiennent avec la barre d'espace). 
Cette fois, on a tapé une bonne instruction, et on ob- 
tient comme réponse : 
BONJOUR!JE SUIS L'ORIC 
Ready 


Vous n'obtenez pas cette réponse ? Etes-vous certain 
d'avoir bien tapé tous les caractères, y compris les 
guillemets ? 


Le point d'interrogation signifie simplement "imprimer". 
On constate que l'on a obtenu une réponse immédiate à 
l'instruction. 


De même, si on tape : 
?72+2 'Return' 


l'ORIC fera le calcul et imprimera immédiatement le ré- 
sultat. On a donc un mode de fonctionnement à peu près 
semblable à celui d'une calculatrice de poche, où une 
instruction est exécutée dès qu'elle vient d'être tapée. 
On dit qu'il s'agit du "mode immédiat" ou "mode d'exécu- 
tion immédiate" ou encore "mode direct". 


L'ORIC a un second mode de fonctionnement. Tapons : 
29 ?2+2 'Return' 
Rien ne se produit. Tapons encore 
19 ?'BONJOUR'" ‘Return! 
Toujours rien. Tapons : 
RUN (les lettres R U N suivies de Return) 


15 


LA DECOUVERTE DE L'ORIC 


Cette fois, on obtient sur l'écran : 


BONJOUR 
4 
Ready 


Que s'est-il passé ? Eh bien, on a fonctionné dans le 
second mode, où les instructions ne sont pas exécutées 
immédiatement, mais mises en mémoire pour exécution ul- 
térieure. Elles forment alors un programme qui est exé- 
cuté lorsque l'on tape la commande RUN en mode direct. 


Sauf une ou deux exceptions, ce sont exactement les 
mêmes instructions qui peuvent être données en mode di- 
rect ou dans le second mode, qui s'appelle "mode différé" 
ou ‘mode programmé". Alors, à quoi reconnaît-on le mode ? 


C'est très simple : en mode différé, toute instruction 
possède en tête un numéro de ligne, alors qu'en mode 
direct, il n'y a pas de numéro de ligne 


?22+2 mode direct 
19 ?2+2 mode différé (il faut taper RUN pour 
avoir la réponse). 


En plus d'imposer le mode programmé, le numéro de li- 
gne joue un autre rôle : on voit sur l'exemple précédent 
que l'instruction 10 a été exécutée avant l'instruction 
20, bien qu'elle ait été tapée après : les instructions 
sont exécutées non pas dans l'ordre chronologique où 
elles ont été tapées, mais par ordre de numéros de ligne 
croissants. 


L'ORIC est naturellement beaucoup plus utilisé en 
mode programmé, mais, avant, pour nous familiariser, 
nous allons effectuer quelques calculs arithmétiques en 
mode direct. 


ARITHMETIQUE EN MODE DIRECT 


Comme toute calculatrice, Ll'ORIC permet d'évaluer des 
expressions plus compliquées que 2+2 ! Dans tous les 
cas, on doit commencer par un ? ou par le mot PRINT 
dont il est l'abréviation : cela signifie "imprimez le 
résultat de l'expression qui suit". 


Essayez (les 'Return' sont sous-entendus) 


25-3.5 (soustraction ; résultat 1.5) 
23x12 (multiplication ; résultat 36) 


16 


LA DECOUVERTE DE L'ORIC 


21/3 (division ; résultat .333333333) 
2215 (élévation à la puissance : résultat 
2° = 32) 


On voit donc quels sont les signes d'opération fonda- 
mentaux. Noter * et non x pour la multiplication, t pour 
l'élévation à la puissance (on ne peut, au clavier, met- 
tre un nombre plus haut que l'autre). 


N.B. Le signe "élévation à la puissance" est listé t à 
l'écran, mais il apparaît sous la forme * sur le clavier 
(shift 6). 


VARIABLES 


Etant donné une expression, on peut en faire autre 
chose que d'imprimer sa valeur : on peut mettre la va- 
leur en mémoire pour utilisation ultérieure dans une 
autre expression. 


Pour cela, il suffit de donner un nom à l'expression, 
en tapant par exemple : 


A=2/3 


On dit qu'on a constitué une variable de nom A. L'ORIC 
lui attribue automatiquement un emplacement mémoire 
(que vous n'avez pas à connaître : l'ORIC se charge en- 
tièrement de la gestion de la mémoire). Ensuite, le ré- 
sultat est calculé et rangé dans la case mémoire 


considérée ; il n'apparaît pas sur l'écran. 
La variable peut maintenant être utilisée dans une 
autre expression ; si on tape : 
22*%A 


on obtient : 
1.33333333 


Quels noms de variables peut-on prendre ? Les noms de 
variables sont pratiquement arbitraires, à ceci près 
qu'ils doivent se plier aux contraintes suivantes : 


- premier caractère : lettre 
- caractères suivants : lettres ou chiffres (ex. À, Al, 
VAR, RESULT, H2S04). 


L'ORIC permet plus de deux caractères, mais il ne 


prend en compte que les deux premiers. Si deux variables 
que vous considérez comme distinctes ont leurs deux 


17 


LA DECOUVERTE DE L'ORIC 


premiers caractères identiques, l'ORIC les confondra : 
par exemple, cas de ALBERT et ALAIN. 


Le fait de pouvoir utiliser plus de deux caractères 
permet de choisir des noms “parlants" comme RESULT, 
TAUX, CAP..., mais le nom ne doit pas contenir un des 
mots particuliers au langage Basic, qu'on appelle les 
mots-clés : CHIFFRE est interdit, car il contient IF 
qui est un mot ayant une signification particulière pour 
Basic. 


La liste des mots-clés "réservés" est fournie en an- 
nexe. 


L'usage d'une variable ne détruit pas sa valeur, ou 
plutôt n'efface pas la mémoire correspondante. Ce n'est 
que lors d'une nouvelle instruction d'affectation (de 


la forme A=...) que la valeur sera changée. 
Essayez le dialogue suivant : (nous omettons les 
'Return' et les Ready) : 
AL = 3 
2AL+5 
8 (5 + 3 = 8) 
23*AL (AL vaut toujours 3) 
9 (3:%=3:= 9.) 
ALAIN = 1 (ALAIN est la même variable que AL, 
?AL+1 elle a maintenant pris la valeur 1) 
2 (1 + 1 = 2) 
Il reste encore une question : à combien de variables 


différentes avons-nous droit ? La limite réelle est en 
fait la taille mémoire, mais on peut espérer avoir plu- 
sieurs centaines de variables, c'est-à-dire de quoi 
traiter les problèmes les plus complexes. 


EVALUATION DES EXPRESSIONS 


On peut calculer des expressions plus compliquées, 
renfermant plusieurs opérations. Essayez 


25+4%x2 
22*x312 
25*x3/4 


La première a pour résultat 13, c'est-à-dire qu'on a 
effectué d'abord la multiplication. La deuxième donne 
18, car on a d'abord effectué le 32. La troisième s'éva- 
lue en calculant d'abord 3 x 3 puis en divisant le ré- 
sultat par 4. 


18 


LA DECOUVERTE DE L'ORIC 


En résumé, on effectue généralement de gauche à droite, 
mais on a une règle de priorité des opérateurs : 


t est le plus prioritaire, puis on a : 


- (prendre l'opposé, exemple : -X), puis : 
* et / (ex-aequo), puis : 
+ et - (ex-aequo). 


Si l'on veut changer l'ordre de priorité, on emploie 
des parenthèses : un groupe entre parenthèses est tou- 
jours évalué en premier. Par exemple : 


(2+10)/5 donne 2.4 alors que 2+10/5 donne 4 
6-(3+5) donne -2 alors que 6-3+5 donne 8 


On peut avoir des parenthèses emboîtées, mais il faut 
toujours qu'il y ait le même nombre de parenthèses ou- 
vrantes et fermantes et que l'expression ait un sens. 
Par exemple 


?2(A-3*(B-C))/5t(B*xC) 


On dispose, pour faciliter les calculs, d'un ensemble 
de fonctions mathématiques qui peuvent intervenir dans 
les expressions arithmétiques. Leur argument est, comme 
toute sous-expression entre parenthèses, évalué en prio- 
rité. La liste complète de ces fonctions est donnée en 
annexe, mais nous citons tout de suite : SIN (sinus), 
COS (cosinus), SQR (racine carrée), EXP (exponentielle) 


?21+SQR(2) donne 2.41421356 


, 


PRECISION DES NOMBRES 


En examinant les résultats obtenus dans les exemples 
qui précèdent, nous pouvons faire un certain nombre de 
remarques 


- l'ORIC peut imprimer des nombres positifs ou négatifs. 
Il imprime un en tête pour un nombre négatif, rien pour 
un nombre négatif. 


- l'ORIC peut imprimer des nombres entiers ou fraction- 
naires. Pour les nombres fractionnaires, on utilise un 
point (convention anglo-saxonne) au lieu de la virgule 
des Français. On utilise le système décimal, il n'y a 
pas à se soucier de binaire. Signalons aussi que les 
zéros sont barrés (ÿ@) pour ne pas être confondus avec 
la lettre ©. 


19 


LA DECOUVERTE DE L'ORIC 


- L'ORIC imprime au maximum 9 chiffres significatifs. 

Il en utilise un peu plus dans la représentation interne 
pour faire les calculs, mais n'en "sort" que 9. La re- 
présentation interne est toujours fractionnaire, mais 
si, à la précision des calculs près, le nombre est assez 
proche d'un entier, il sera imprimé comme entier. 


?214.99999999 donne 15 


- si le nombre à imprimer est <0,1 ou >999999999, il 
est imprimé en "notation flottante", c'est-à-dire sous 
la forme : Sx.xxxxxxxxEstt (x et t sont des chiffres, S 
est le signe du nombre, s le signe de l'exposant). 


20.000123 donne 1.23E-04 - 
ce qui se comprend comme 1,23x10 


2-1000000000 donne -1E+09 
ce qui se comprend comme -1x10° 


4 


Voilà terminée notre prise de contact avec l'ORIC. 
Nous espérons qu'elle n'a pas été trop ardue, et nous 
vous encourageons à essayer d'autres exemples, pour bien 
vous familiariser. 


Nous sommes prêts maintenant à utiliser l'ORIC en mode 
programmé. 

















20 


LA DECOUVERTE DE L'ORIC 


CHAPITRE 11 
INSTRUCTIONS FONDAMENTALES 


LE PREMIER PROGRAMME 


Tout en commençant par des notions très simples, nous 
passons maintenant à une programmation plus élaborée, 
en mode différé. 


Tout traitement d'informations, donc tout programme, 
comprend trois étapes fondamentales, immuables : 


- l'acquisition ou entrée des données à traiter :; 

- le traitement des données c'est-à-dire le calcul des 
résultats : 

- la sortie des résultats. 


On aura donc en Basic trois instructions fondamentales 


correspondant à ces trois actions ; on les retrouve dans 
le programme À qui a simplement pour but de calculer la 
surface d'un cercle de rayon R (S = PIx R? ). 


Programme A-1 


19 INPUT R 
29 S=PI*xRt2 
39 PRINT S 


Les programmes sont identifiés par une lettre suivie 
d'un numéro de version. 


L'instruction 19 correspond à l'entrée au clavier du 
rayon R. Lorsque vous aurez tapé RUN, en exécution de 


21 


LA DECOUVERTE DE L'ORIC 


cette instruction, L'ORIC affichera sur l'écran un ? et 
le curseur clignotant. Il se mettra en attente que vous 
tapiez une valeur du rayon. Lorsque vous l'aurez fait, 
admettons que vous ayez tapé 1.5 (ce qui veut dire 1,5) 
sans oublier le ‘Return', l'ORIC affectera cette valeur 
à la variable et passera à l'instruction suivante. 


L'instruction 29 est l'instruction du calcul propre- 
ment dit de la surface à laquelle on a donné le nom de 
variable S. L'expression arithmétique Basic est une co- 
pie presque conforme (les signes d'opération sont obli- 
gatoires) de la formule mathématique qui intervient. 
Notons que le Basic de l'ORIC considère PI comme une va- 
riable réservée dont il "connaît" la valeur (3,14...). 


L'instruction 39 demande simplement l'affichage du ré- 
sultat 7.06858347, comme nous l'avons vu en mode direct. 


Tout ceci est simple n'est-ce pas ? Eh bien cela ren- 
ferme 90% de tout le Basic, puisque tout repose sur les 
trois opérations fondamentales que nous avons citées. 


Bien que simple, le programme que nous venons d'écrire 
fonctionne de façon satisfaisante : pour calculer la 
surface d'un cercle, on tape RUN puis, dès que l'ORIC a 
affiché un point d'interrogation, on tape la valeur du 
rayon considéré, et dès qu'on a appuyé sur la touche 
‘Return', le résultat apparaît sur l'écran. Et à chaque 
fois qu'on tape RUN, le programme est réexécuté pour un 
nouveau rayon : on peut avoir la surface correspondant 
à autant de rayons que l'on veut. Le fait d'exécuter le 
programme ne l''use" pas, c'est-à-dire qu'il reste en 
mémoire et, dès qu'on tape la commande directe RUN sui- 
vie de 'Return', le programme présent en mémoire s'exé- 
cute. 


Quelques perfectionnements 


Toutefois, le comportement de ce programme a quelques 
petits inconvénients auxquels nous allons remédier, ce 
qui va nous permettre de voir de nouvelles instructions 
Basic ou de nouvelles formes de celles que nous connais- 
sons. Nous suivrons d'ailleurs cette méthode tout au 
long du livre. 


’ 


Objection n° 1 : Lorsque l'ORIC affiche le ? au cours 

de l'instruction INPUT, rien ne dit que c'est à un rayon 
qu'il s'attend ; cela n'est pas gênant car nous le sa- 
vons, mais une personne qui ne connaîtrait pas le pro- 
gramme ne saurait pas quoi répondre au point d'interro- 
gation. Même l'auteur du programme, dans le cas d'un 


programme qui a besoin de beaucoup de données, peut 


22 


LA DECOUVERTE DE L'ORIC 


avoir besoin qu'on lui remémore dans quel ordre entrer 
celles-ci. 


En résumé, ce qui serait souhaitable, c'est d'afficher 
un message qui dise à l'utilisateur quelles sont les 
données attendues par Ll'INPUT. On aimerait, par exemple, 
avoir un affichage du genre : 


RAYON DU CERCLE ? ou DONNEZ UN RAYON ? 


Eh bien Basic le permet très facilement. En effet, on 
peut employer INPUT sous la forme : 


INPUT "texte" ; variable 


A ce moment, le texte entre les guillemets va appa- 
raître sur l'écran, suivi du point d'interrogation ha- 
bituel de INPUT, et il suffit de répondre comme dans le 
cas précédent. 


Ainsi, si on remplace l'instruction 1% du programme 
A-1l par : 


19 INPUT "RAYON DU CERCLE" ; R 


notre problème sera complètement résolu. Le point- 
virgule qui sépare le texte de la liste de variables 
est impératif, tout comme les guillemets qui délimitent 
le texte. 


Oui, mais comment remplacer l'ancienne instruction 1ÿ 
par la nouvelle ? Tout simplement en tapant la nouvelle 
instruction 19, sans oublier de commencer par le numéro. 
Elle viendra remplacer l'ancienne dans la mémoire où le 
programme est conservé. 


Objection n° 2 : Lorsque le résultat est affiché, on 
obtient un nombre, mais rien n'indique qu'il s'agisse 
de la surface du cercle. On aimerait bien, là aussi, 
qu'un message convenable nous éclaire. Dans le cas d'un 
programme fournissant beaucoup de résultats, il serait 
tout à fait indispensable que chaque résultat soit 
identifié. 

Comme le précédent, ce problème se résout facilement 
en Basic. Il suffit de savoir qu'on peut, par PRINT, 
afficher n'importe quel texte entouré de guillemets. 


Ainsi, nous pourrons remplacer l'instruction 3% par : 
39 PRINT "SURFACE =",S 


, 


et tout sera dit. 


23 


LA DECOUVERTE DE L'ORIC 


On aura maintenant un dialogue de la forme (nous sou- 
lignons ce qui est tapé par l'utilisateur) 


RUN 
RAYON DU CERCLE ? 14 
SURFACE = 314.159265 
Ready 


Objection n° 8 : Notre programme est nettement amélioré, 
surtout du point de vue du dialogue homme-machine, et 
toute entrée-sortie doit toujours se présenter ainsi. 
Mais il reste encore un petit élément d'inconfort : 
lorsqu'on veut traiter plusieurs rayons, il faut à 
chaque fois taper RUN, ce qui est un peu fastidieux. 


Basic a une réponse : nous allons ajouter à la fin du 
programme une instruction qui dit à l'ORIC "recommencez 
l'exécution depuis le début (=l'instruction 1#)". 
Ajoutons l'instruction : 

49 GOTO 19 
Sachant que "GOTO" signifie "aller à", le fonctionnement 
est évident : à chaque fois qu'un calcul est fait et 


son résultat imprimé, l'ORIC arrive à l'instruction 4ÿ 
qui le renvoie en 1# où on demande un nouveau rayon et 
ainsi de suite ... 


On dispose maintenant du programme A-2 qui, bien 
qu'il ait été facile à écrire, a un comportement très 
commode. Il fait apparaître une notion importante, la 
notion de boucle. Une structure formée d'un groupe 
d'instructions qui seront exécutées plusieurs fois s'ap- 
pelle une boucle. La possibilité d'exécuter des boucles, 
donc d'effectuer des calculs itératifs est un point 
fort des ordinateurs. 


Programme A-2 


19 INPUT "RAYON DU CERCLE'";R 
29 S=PI*R'2 

39 PRINT ‘"SURFACE = ",S 

4ÿ GOTO 1ÿ 


Sortie du programme par 'Çtrl' C. 
Commande CONT. 


La bouclé que nous venons de voir dans le programme 
A-2 résolvait un problème, mais elle nous en pose un 
autre : en effet, elle ne finit jamais. Indéfiniment 
l'ORIC demandera un nouveau rayon, et encore un autre... 


24 


LA DECOUVERTE DE L'ORIC 


Il est en fait normalement interdit d'implanter une 
telle boucle indéfinie dans un programme ; tout pro- 
gramme doit être assuré de se terminer au bout d'un 
temps fini. Nous verrons par la suite des instructions 
permettant d'établir des boucles dont on est sûr 
qu'elles se terminent. Cependant, on a un moyen de s'en 
sortir. 


Ce moyen est nécessaire car, malheureusement, il peut 
arriver que les choses s'arrangent mal. Si, par suite 
d'une erreur de programmation, l'ordinateur se perd 
dans une boucle sans fin et tourne indéfiniment sans 
fournir de résultat, ne peut-on pas reprendre le con- 
trôle ? 


Si ! Il suffit d'appuyer sur la combinaison de touches 
'Ctrl' et C. On obtient aussitôt l'affichage : 
BREAK IN (arrêt à l'instruction numéro...) 
Ready 


On peut alors faire imprimer des variables pour voir 
si tout est correct. Il se peut, en effet, que l'on 
n'obtienne pas de résultats pendant longtemps, simple- 
ment parce que les calculs sont longs et non parce que 
l'on a une boucle indéfinie. À ce moment, on peut faire 
reprendre l'exécution là où elle en était, en tapant la 
commande en mode direct : CONT. 


ICtrl' C fait arrêter l'exécution du programme de fa- 
çon que celle-ci puisse reprendre par CONT. CONT ne peut 
fonctionner que s'il n'y a eu aucune modification du 
programme pendant l'arrêt. 


Le programme A-2 est donc correct : nous pouvons avoir 
la surface de tous les cercles que nous voulons, et 
quand nous n'en voulons plus, nous frappons les touches 
‘'Ctrl' et C pour terminer. 


N.B. Le message BREAK IN... n'apparaît pas lorsque 
c'est un INPUT qu'on interrompt par 'Ctrl' cC. 


Compléments : Sans prétendre être complets (le meilleur 
moyen d'apprendre toutes les particularités d'un lan- 
gage, c'est la pratique) il y a un ou deux détails sup- 
plémentaires que nous devons donner maintenant sur INPUT 
et sur PRINT. 


Entrée de plusieurs données 


On peut entrer plusieurs données dans une même instruc- 
tion INPUT. Par exemple, si au lieu de calculer la sur- 
face du cercle, nous voulions calculer le volume d'un 


25 


LA DECOUVERTE DE L'ORIC 


cylindre, il faudrait donner le rayon, mais aussi la 
hauteur H. 


On pourrait employer une instruction de la forme : 
19 INPUT "RAYON,HAUTEUR":R,H 


et, en réponse, il faudrait maintenant taper deux nom- 
bres séparés par une virgule : 


RAYON ,HAUTEUR ? 15.5 , 2ÿ ‘Return! 


Ne confondez pas le point de 15.5 qui, en notation an- 
glaise sépare partie entière et partie décimale d'un 
nombre, avec la virgule qui sépare deux nombres diffé- 
rents qui iront dans des variables différentes. 


Petit "courrier du coeur" : En réponse à un INPUT I,J 
où je devais entrer les valeurs 45 et 105, j'ai, par 
erreur, malt placé la virgule et tapé 4,5105. Que se 
passe-t-il ? : ... 1l'ORIC va entreprendre les calculs 
avec les valeurs I = 4 et J = 5105, qui ne sont pas 
celles que vous souhaitiez. 


Autre question : à un INPUT I,J où je devais fournir 
deux valeurs, je n'en n'ait donné qu'une, suivie de 
lReturn'. Que se passe-t-il ? : ... rien de grave, 
l'ORIC va prendre en compte cette première valeur et, 
voyant qu'il lui en faut une autre, il affichera un nou- 
veau point d'interrogation. Lorsqu'on a un INPUT à plu- 
sieurs variables, on peut grouper les données qu'on 
fournit comme on veut, puisque, tant qu'il n'aura pas 

eu toutes les valeurs qu'il attendait, Ll'ORIC vous le 
signalera en affichant un point d'interrogation. 


Exemple de dialogue: (instruction 19 INPUT"I,J ":I,J) 


I1,J ? 45 'Return' 
? 105 ‘Return! 


Au contraire, maintenant, je tape trop de valeurs 
(exemple : 45,105,200 pour INPUT I,J). Que se passe-t- 
il ? : ... l'ORIC prend en compte les n premières va- 
leurs s'il en attend n (dans notre exemple I = 45 et 
J = 105) et il imprime EXTRA IGNORED ce qui indique que 
les valeurs supplémentaires (et superflues) sont igno- 
rées. 


Et si je ne tape pas du tout de valeurs, c'est-à-dire 
st, en réponse à un INPUT, je fais "Return! tout de 
suite ? : ... 1'ORIC affiche un point d'interrogation 
pour montrer qu'il attend des données. 


26 


LA DECOUVERTE DE L'ORIC 


Expression arithmétique dans un ordre PRINT 


Nous avons, jusqu'ici, demandé l'impression soit d'un 
titre, soit de la valeur d'une variable. Ce sont des cas 
particuliers de la loi générale qui permet de mettre 
comme élément à imprimer n'importe quelle expression 
arithmétique : L'ORIC effectuera le calcul et affichera 
la valeur obtenue. 


Tapez 
2"5 À POUR CARRE",5t2 


Vous obtiendrez 
5 À POUR CARRE 25 


Comme cas particulier d'expression arithmétique, on 
peut mettre une variable, mais même une constante. On 
pourrait écrire : 

? 5 ; "A POUR CARRE", 512 
à la place de l'exemple précédent. 


Lorsqu'on fait imprimer un titre, on exploite ce fait : 
tout texte encadré de guillemets constitue une constante 
chaîne de caractères. 


Séparation des éléments dans une liste d'impression 


Il est bien entendu que là où nous disons "impression" 
il faut entendre "affichage sur l'écran", mais avec 
l'ORIC il suffit d'une seule modification que nous ver- 
rons bien plus tard pour que toutes les informations 
concernées par tous les ordres d'impression apparais- 
sent à l'imprimante si l'on en dispose d'une. 


Finissons-en aussi avec le point d'interrogation : 
sur l'ORIC, ? est une abréviation commode de l'instruc- 
tion PRINT. 


Par ailleurs, dans les différents exemples qui ont 
précédé, lorsque nous avons voulu afficher plusieurs 
informations dans le même ordre PRINT, nous les avons 
séparées tantôt par point-virgule, tantôt par virgule. 
Quelle est la différence ? Lorsque deux zones sont sépa- 
rées par point-virgule, elles seront imprimées join- 
tives sur la ligne, tandis que si on les sépare par une 
virgule, l'impression de la seconde zone commencera à 
la colonne 6 (on appelle cela la tabulation ; en fait, 
elle consiste à laisser 3 espaces). 


Essayez : 
?A,B 

(2 (1 

?2A;:B 

g 


& 


27 


LA DECOUVERTE DE L'ORIC 


Pourquoi les zéros ne sont-ils pas "collés" dans le 
second exemple ? Parce que chaque nombre imprimé com- 
porte un signe (ici on n'a rien car les nombres sont 
positifs) et est suivi d'un espacement. 


Qu'en est-il pour les chaînes de caractères ? 
Essayez : 


2'""BON" ; "JOUR" 

BONJOUR 

2"BON'" , "JOUR" 

BON JOUR 

2"EH BONJOUR" , "MONSIEUR" 
EH BONJOUR MONSIEUR 


Encore deux indications : 


- Si nous ne mettions aucun séparateur, l'ORIC ferait 
comme si nous avions mis un point-virgule. Mais cela 
n'est pas possible qu'entre deux chaînes de caractères, 
ou entre chaîne et variable. 


- On peut terminer l'ordre PRINT par une , ou un ; 
alors qu'il n'y a rien à séparer. Cela a pour effet que 
le prochain ordre PRINT écrira sur la même ligne, de 
façon jointive ou avec une tabulation, selon que l'on 
aura mis ; où , 


Essayez les programmes : 


l 2 3 

19 ?'"BON" 19 ?'"BON'; 19 ?'"'BON"', 

29 ?"JOUR" 29 ?"JOUR" 29 ?"JOUR" 
Effet 

BON BONJOUR BON JOUR 

JOUR 


Tout vient de ce qu'un ordre PRINT normal effectue un 
"retour chariot" pour terminer, qui est supprimé par le 
OÙ da ; 

Par contre, si l'on veut avancer d'une ligne sans rien 
imprimer, il suffit de mettre PRINT tout court. 


Précisons enfin que, si pour un PRINT la , ou le ; ne 
font pas grande différence sauf si l'on veut soigner la 
mise en page, pour INPUT ils sont essentiels et pas du 
tout interchangeables : les variables à entrer doivent 
être séparées par des virgules (ainsi que les données au 
moment où on les fournit) et, s'il y a un message de 
titre, il doit être séparé du reste par un point-virgule. 


28 


LA DECOUVERTE DE L'ORIC 


EXERCICES 


Bien que nous n'ayons vu que trois instructions Basic 
nous avons déjà en main des possibilités immenses, car 
elles couvrent les trois opérations fondamentales de 
tout traitement 


’ 


- entrer les données, 
- calculer, 
- sortir les résultats. 


Vérifions-le sur deux exercices que nous vous recom- 
mandons instamment de traiter sans regarder la solution 


à la fin du volume. 


Exercice 2.1 


Modifier le programme A-2 pour calculer le volume de 
cylindres de rayon R et hauteur H. 


Exercice 2.2 


Ecrire un programme de structure analogue, mais qui 
calcule l'intérêt rapporté par un certain capital placé 
à un certain taux pendant N années (intérêts composés 
annuellement). 


Remarque : la numérotation des exercices est faite sous 
la forme chapitre.numéro. 


29 


LA DECOUVERTE DE L'ORIC 


CHAPITRE III 
COMMANDES FONDAMENTALES 


Un programme entré en mode différé ne peut être uti- 
lisé qu'en conjonction avec un certain nombre de com- 
mandes en mode direct, qui disent au système 
d'exploitation ce que l'on veut faire. 


Nous avons déjà vu la plus fondamentale de ces comman- 
des : RUN qui permet d'exécuter le programme. 


Mais on peut faire d'autres opérations sur un pro- 
gramme. On peut le lister, c'est-à-dire imprimer ses 
instructions, ce qui est utile, notamment pour recher- 
cher des erreurs, ou si l'on envisage une modification. 
On peut le corriger et, pour cela, l'ORIC est assez 
commode. On peut le sauvegarder sur cassette pour pou- 
voir l'utiliser ultérieurement sans avoir à le retaper. 


Le Basic de l'ORIC possède tout un environnement de 
commandes permettant ces opérations. Il est indispensa- 
ble que nous les voyions maintenant. 


LIST 


LIST tout court fournit sur l'écran la copie de tout 
le programme présent en mémoire. S'il n'y a pas de pro- 
gramme, par exemple, aussitôt après la mise sous ten- 
sion, l'ORIC affiche Ready immédiatement. On dit qu'on 
obtient la liste, ou en franglais le listing du pro- 
gramme. 


31 


LA DECOUVERTE DE L'ORIC 


Si le programme est très long, et donc ne tient pas 
dans les 28 lignes de l'écran, la liste va défiler sur 
l'écran (une ligne apparaît en bas alors qu'une ligne 
disparaît en haut) et la lecture sera difficile. Pour 
la faciliter, on peut stopper en appuyant sur la barre 
d'espace. Le listing reprend en appuyant sur n'importe 
quelle touche. 


Vous pouvez l'essayer, mais les programmes que nous 
avons écrits jusqu'à présent sont un peu courts pour 
que cela se voie bien. 


Deux particularités sont apparues sur les listes que 
nous avons pu obtenir en faisant quelques essais. 


- les instructions apparaissent sur la liste dans l'or- 
dre des numéros croissants, c'est-à-dire le même ordre 
que pour l'exécution, quel que soit l'ordre dans le- 
quel elles ont été tapées :; 


- si, pour des instructions d'impression, nous avons 
utilisé le point d'interrogation, sur la liste c'est 
le mot PRINT qui apparaît. 


Nous supposerons dans la suite que nous avons en mé- 
moire, le programme A-2 du chapitre précédent. 


Listes partielles 


On peut lister une seule instruction, en donnant son 
numéro : LIST x 


LIST 2ÿ 
29 S=PI*xRt2 


Pour lister toutes les instructions comprises entre 
les instructions de numéros x et y, on tape LIST x - y 


LIST 29 - 3% 
29 S=PI*Rt2 


39 PRINT "SURFACE = ",S 
Les bornes - si elles existent - sont comprises. 
LIST 15 - 35 donnerait le même résultat que l'exemple 


précédent. 


LIST -x : liste depuis le début jusqu'à la ligne x 
LIST -2ÿ 
19 INPUT "RAYON DU CERCLE'":R 
29 S=PI*Rt2 


32 


LA DECOUVERTE DE L'ORIC 


LIST x- : liste à partir de la ligne x jusqu'à la fin : 
LIST 34- 
39 PRINT "SURFACE = ",S 
49 GOTO 1ÿ 


Comme l'exécution d'un programme, une liste peut être 
interrompue à l'aide des touches 'Ctrl' C. Couplé avec 
le LIST x-, cela permet de lister un long programme par 
morceaux : on appuie sur ‘'Ctrl' C quand on voit que 
l'écran va être plein. 





Bien sûr, s'il n'y a aucune instruction dans l'inter- 
valle demandé, on a tout de suite Ready. 


NEW 


Lorsqu'on tape une instruction Basic en mode program- 
mé (donc avec un numéro) il peut se passer deux choses : 


- ou bien l'instruction que l'on vient de taper porte 
le même numéro qu'une instruction déjà présente : à 
ce moment elle vient remplacer l'ancienne ; 


- ou bien il n'existait pas d'instruction de même numéro 
que celle qu'on vient de taper : alors - comme on 
pourrait le constater en demandant LIST - l'instruc- 
tion vient s'intercaler dans le programme à la place 
impliquée par son numéro. 


Il en résulte que, si l'on veut introduire un program- 
me complètement nouveau, et si les instructions nou- 
velles ne correspondent pas une à une à celles de 
l'ancien programme, il restera des instructions ancien- 
nes au milieu des nouvelles, qui, bien entendu, pertur- 
beront le fonctionnement. 


La commande WEW a pour but d'éliminer cet inconvénient 
son effet est de supprimer complètement le programme 
actuellement présent. Il est conseillé de l'utiliser 
avant de taper un nouveau programme. 


NEW ne doit pas être confondue avec une autre commande 
ou instruction CLEAR qui, elle, a pour effet de remet- 
tre à zéro toutes les variables. En somme, NEW vide la 
mémoire programme tandis que CLEAR vide la mémoire des 
données (l'une et l'autre sont deux zones de la même 
mémoire ). 


Enfin, une autre instruction, CLS, vide l'écran. 


33 


LA DECOUVERTE DE L'ORIC 


Remarque : En fait, NEW contient CLEAR, c'est-à-dire 
que lorsqu'on fait NEW, toutes les variables sont, par 
la même occasion, remises à zéro. De même, RUN contient 
CLEAR, ce qui faut qu'au début de l'exécution d'un pro- 
gramme, toutes les variables ont la valeur 0 jusqu'à ce 
qu'une instruction leur donne une autre valeur. 


RUN 


Nous connaissons déjà bien la commande RUN tout court. 
On peut l'employer aussi sous la forme RUN x où x est 
un numéro d'instruction. Cela aura pour effet de lancer 
l'exécution du programme, mais à partir de la ligne x. 


Question : J'ai un programme comportant l'instruction 
19. Je peux le lancer par RUN 1ÿ . Je peux aussi le 
lancer en tapant GOTO 1# en mode direct. Quelle est la 
différence ? 

- RUN 19 remet les variables à zéro, ce que ne fait pas 
GOTO 1ÿ. Introduisez comme programme : 


5 A = 3 

19 ?A 
et essayez les dialogues 

l 2 3 

A=5 A=5 A=5 

RUN RUN 1ÿ GOTO 1ÿ 
Effet 

3 (9) 5 


Dans le premier cas, on passe sur l'instruction 5 qui 
donne à À la valeur 3. Dans le second cas, RUN remet AÀ 
à zéro. Ce n'est que dans le troisième cas que l'effet 
de l'affectation en mode immédiat sera conservé. 


END 


Le RUN numéro permet de constituer un programme en 
plusieurs parties telles que l'on exécute tantôt l'une 
tantôt l'autre. Il suffit de taper RUN numéro de la 
première instruction de la partie voulue. 


Oui, mais supposons que l'on ait exécuté la première 
partie : on va tomber maintenant sur la deuxième partie, 
ce qui n'est peut être pas souhaité. Il suffit de 


34 


LA DECOUVERTE DE L'ORIC 


terminer chaque partie par une instruction END qui veut 
dire ‘retourner au niveau de commande directe". Après 
exécution d'une instruction END, Basic affiche Ready. 
Pour la bonne règle, notre programme A-1l aurait dû se 
terminer par une instruction 


49 END 


Mais, en fait, lorsque Basic arrive à la dernière 
instruction d'un programme sans rencontrer de END, il 
fait comme s'il y avait cette instruction. 


Edition d'un programme 


Nous devons voir maintenant tout un ensemble de pro- 
cédures qui permettent de modifier ou corriger un pro- 
gramme en ayant le moins possible à retaper. 


De ce point de vue, l'ORIC est assez commode. Mais 
avant de voir ces procédures, il nous faut faire plus 
ample connaissance avec le clavier. Nous aurions pu le 
faire précédemment, avant même de procéder à nos pre- 
miers essais, mais nous avons pu nous en passer, alors 
que maintenant c'est indispensable. 


Le clavier de Ll'ORIC 


Le clavier de l'ORIC est représenté figure 3-1. 


Les touches de l'ATMOS sont de taille et de toucher 
plus professionnels, mais leur disposition est la même. 


“ $ 
4 


COLLE 





Figure 3-1 : le clavier de l'ORIC 


On peut considérer qu'il y a trois sortes de touches 


- les touches ordinaires, dont l'appui fait afficher le 
caractère correspondant sur l'écran : par exemple, 
quand vous appuyez sur la touche À, il s'imprime un À 
sur l'écran 


35 


LA DECOUVERTE DE L'ORIC 


- les touches de modification de l'affichage et les tou- 
ches spéciales : comme 'Return' ou les touches de 
mouvement de curseur ; 


- les touches de commande qui, enfoncées simultanément 
avec une seconde touche, déterminent la fonction de 
cette seconde touche. Les touches de commande sont 
'SHIFT' (il en existe deux qui sont parfaitement équi- 
valentes), 'Ctrl' (Contrôle) et 'Esc' (Escape). 


Chaque touche ordinaire a, en général, deux fonctions, 
représentées l'une au dessus de l'autre, au dessus de 
la touche. (Ex. [?/ ). Vous obtenez le caractère du bas 
(Ex. /) en appuyant simplement sur la touche. Vous obte- 
nez le caractère du haut (Ex. ?) en appuyant en mème 
temps sur SHIFT. 


Lorsque nous disons "en appuyant simultanément", cela 
signifie : appuyer d'abord sur la touche de commande 
(SHIFT ou CTRL) et la maintenir enfoncée, appuyer sur 
la touche voulue, la relâcher, et, enfin, relâcher la 
touche de commande. Entraînez-vous à votre clavier ! 


A 


Le signe t (élévation à la puissance) est marqué 
sur le clavier ('Shift' 6). 


Pour les touches lettre, il y a deux modes : majus- 
cules seules (valable à la mise sous tension) et majus- 
cules/minuscules où, sans 'Shift' on a la minuscule, et 
avec 'Shift' on a la majuscule. On passe d'un mode à 
l'autre en faisant 'Ctrl' T. Les programmes Basic doi- 
vent être tapés en majuscules. 





Touches mouvement de curseur 


Le curseur est le rectangle clignotant que vous avez 
à l'affichage lorsque l'ORIC attend que vous tapiez 
quelque chose : il marque la position sur l'écran où 
apparaîtra le prochain caractère que vous taperez. 


Les touches mouvements de curseur déplacent ce curseur 
sans imprimer de caractère ni modifier les caractères 
déjà présents à l'écran, sur lesquels le curseur passe. 


Les touches —, | , + , et 4 créent , de façon évidente 
le mouvement marqué. 


Exemple : t que nous figurerons sous la forme h fait 
aller d'un cran vers le haut. De même, nous utiliserons 


36 


LA DECOUVERTE DE L'ORIC 


les abréviations suivantes pour les symboles flèches en 
bas b, flèche à gauche g, flèche à droite d. 


Exercice d'entraînement 3.1 


Effectuez le parcours figure 3.28 en prenant bien soin 
de revenir au point 4. 


Figure 3-2 


La touche 'Del' supprime le caractère immédiatement à 
sa gauche, permettant ainsi une correction immédiate 
des erreurs de frappe. 


Nous voulons taper BONJOUR, mais nous nous apercevons 
que nous avons tapé BONKO 

Nous tapons une première fois sur 'Del' : BONK 

puis une deuxième : BON et nous n'avons plus qu'à 
continuer JOUR. ‘ 


Exercice d'entraînement 3.2 


Vous vouliez taper BONJOUR et vous avez tapé BONUR 
Ces dernières touches vont spécialement nous servir 
pour la correction des programmes. 
La touche "Ctrl 

La touche ‘'Ctrl' produit des fonctions spéciales lors- 


qu'elle est appuyée en même temps que certaines autres 
touches. 





Actions en va et vient 


Un appui produit une action, un deuxième appui produit 
le contraire. 








‘Ctrl' D passe en mode doubles caractères en hauteur 

‘Ctrl'F active/supprime le bip à chaque appui de 
touche 

“CELL "EP active l'imprimante 

"Ctrl! Q active/supprime le curseur 

"CtrL'.S active l'écran 





37 


LA DECOUVERTE DE L'ORIC 


ICtrL"T passe en mode majuscules seules. 

Ctrl! ] permet d'accéder aux deux colonnes de 
gauche de l'écran (la ligne passe ainsi à 
40 colonnes). 





Formatage sur l'écran 




















“Ctrl -H curseur à gauche. 
ICETLLT curseur à droite. 
“Ctrl! curseur bas. 
CEE! K curseur haut. 
CEA UE vidage écran. 
'Ctrl' M retour-chariot. 

N 


CELL" vide la ligne où se trouve le curseur. 





Actions spéciales 


“CtEL"--A se comporte comme un curseur à droite mais 
tout se passe comme si les caractères sur 
lesquels on passe venaient d'être retapés. 
C'est un des outils essentiels de la correc- 
tion des programmes. 





Ctrl" C stoppe l'exécution d'un programme ou d'un 
listing. 

'CEEL":.G fait retentir un "ding". 

LCTEL': X arrête la frappe d'une ligne. 


La touche "Esc' (escape) 


Attention, à la différence de 'Ctrl' et 'Shift', vous 
appuyez sur 'Esc' puis sur le second caractère. 


Cette touche a pour effet de modifier les attributs 
de l'affichage écran, à partir du moment où elle est ta- 
pée jusqu'à la fin de la ligne ou jusqu'à la prochaine 
modification. Les attributs seront traités plus en dé- 
tail dans un autre chapitre. Disons ici qu'ils déter- 
minent la couleur du fond et la couleur des caractères, 
le fait d'être en simple hauteur ou en double, le fait 
d'être fixe ou clignotant, le fait d'être pris dans le 
jeu de caractères standard ou auxiliaire. 


38 


LA DECOUVERTE DE L'ORIC 


| 'Esc' ë 
EE 





'Esc' 
suivi de 








































































@ caractères noirs double hauteur, 
À caractères rouges clign, std 
B caractères verts double hauteur, 
C caractères jaunes clign, aux 
D caractères bleus . 
à P fond noir 
E caractères pourpres 
à Q fond rouge 
F caracteres 
: R fond vert 
turquoises : 
G caractères blancs : FonQ Jeune 
T fond bleu 
H simple hauteur, (e) fond pourpre 
fixe, std V fond turquoise 
I simple hauteur, W fond blanc 
fixe, aux 
J double hauteur À RUE 
; G Y texte 60 Hz 
fixe, std 
Z texte 50 Hz 
K double hauteur, 
; { texte 50 Hz 
fixe, aux 
| L simple hauteur, } graphique 60 Hz 
| clign, std de graphique 50 Hz 
M simple hauteur, 
clign, aux 
Notes : std = jeu de caractères standard 
aux = jeu de caractères auxiliaire 
clign = clignotant. 
le 50 Hz est applicable en Europe, le 60 Hz aux U.S.A. 
St, en Europe, vous faites un 'Esc' X, vous perdez la synchro- 
nisation de l'affichage. 









Exercice 3.3 


Ecrivez (en mode direct) BONJOUR MADAME BONJOUR MON- 
SIEUR avec les deux BONJOUR fixes sur fond blanc, Le 
premier noir, le deuxième bleu. MADAME clignotant blanc 
sur fond noir, MONSIEUR clignotant jaune sur fond bleu. 


Autres touches spéciales 
Nous avons déjà vu les rôles de 'Return' (retour- 


chariot et acquittement de message) et 'Barre d'espace! 
(espace et arrêt temporaire d'un listing 


39 


LA DECOUVERTE DE L'ORIC 


Mode minuscule 


À la mise sous tension, les touches lettres donnent 
la lettre majuscule, avec Shift ou sans Shift. 


Eh bien il existe un mode où l'on obtient la lettre 
minuscule (avec la touche seule), la lettre majuscule 
(avec Shift). On a donc un comportement de machine à 
écrire. 


On passe d'un mode à l'autre, et inversement, en ap- 
puyant simultanément sur 'Ctrl' et T. La transformation 
affecte tout ce qui est affiché sur l'écran. 


Répétition 


Toutes les touches ont la répétition automatique, 
c'est-à-dire que si on les maintient appuyées, leur 
fonction se répète. C'est spécialement pratique pour 
faire voyager rapidement le curseur. 


L'ORIC ATMOS a exactement la même disposition de tou- 
ches sauf qu'il a en plus, en bas à droite, une touche 
FUNCT qui n'a pas reçu de rôle spécial mais dont l'appui 
peut être décelé (cf p. 104) de la même façon que SHIFT 
ou CTRL. 


Modification ou correction d'un programme 


Lorsqu'on a trouvé une erreur dans un programme, ou 
lorsqu'on veut simplement y apporter une modification, 
il est important de pouvoir le faire commodément, c'est- 
àa-dire en ayant le moins possible d'informations à re- 
taper. 


Nous savons déjà : 


- Ajouter ou insérer une nouvelle instruction : il suf- 


fit de taper l'instruction en lui attribuant un numéro 
compris entre ceux des instructions entre lesquelles on 
veut l'intercaler. 


Il en résulte immédiatement un conseil : lorsqu'on 
écrit la première version d'un progamme, il ne faut pas 
donner des numéros consécutifs, afin de pouvoir faire 
des insertions par la suite. On suggère, par exemple, 
de numéroter de 10 en 10 : 


- Transformer complètement une instruction : on tape la 


nouvelle version avec le même numéro que l'ancienne. 
Dès qu'on tape 'Return' le remplacement s'effectue. 


40 


LA DECOUVERTE DE L'ORIC 


Voyons maintenant de nouvelles possibilités : 


- Suppression complète d'une instruction : il suffit de 
taper le numéro suivi de 'Return'. 


Nous allons en faire un essai qui va nous servir pour 
la suite. Nous supposons que nous avons le programme 
A-1l en mémoire (sinon, retapez-le : c'est fastidieux, 
mais nous verrons bientôt comment récupérer un programme 
sans le retaper, grâce aux cassettes). 


Faisons un LIST, mais, avant, nous tapons CLS pour 
avoir le listing en haut de l'écran. 


Ensuite, nous tapons 3% ‘Return' pour supprimer la der- 
nière instruction. Nous vérifions par LIST que cela a 
bien été fait. Nous n'avons plus l'instruction 3ÿ. 


Pour la récupérer, si par suite d'une erreur ce 
n'était pas celle-là qu'il fallait supprimer, on doit 
théoriquement la retaper. Eh bien non ! Pas tant que 
l'instruction est affichée. En effet, tant que l'ins- 
truction est affichée, elle est dans la mémoire d'écran. 
Il y a un moyen de la transférer dans la mémoire pro- 
gramme : c'est de ramener le curseur au début de la li- 
gne de l'instruction et de parcourir la ligne en faisant 
"'Ctrl' À ; on termine par ‘Return! 


! 


Essayons-le : nous amenons le curseur sur la ligne 3ÿ 
du premier listing ; on a, à l'affichage 


ÿ PRINT S 
On fait des ‘'Ctrl' À jusqu'à 3% PRINT S 


A ce moment, on tape ‘Return'. Il semble ne rien se 
passer. Descendons le curseur vers le bas de l'écran et 
faisons LIST : on voit alors que l'instruction 39 est 
revenue dans le programme. 


En résumé, dès qu'on tape ‘'Ctrl' À en face d'un ca- 
ractère sur l'écran, c'est comme si on le retapait. 
C'est ce qui va nous servir pour toutes les autres pro- 
cédures de modification. C'est déjà ce qui est exploité 
pour supprimer une instruction : on crée une nouvelle 
version vide de l'instruction, et Basic ne garde pas 
une instruction vide. 


- Modifications de quelques caractères sur une ligne 


C'est la que se manifeste toute la puissance du système 
d'édition de l'ORIC. Il résulte de ce que nous venons 
de voir que la procédure à observer est la suivante : 





1 - Lister la ligne à modifier (si elle n'est pas déjà 
sur l'écran). 


41 


LA DECOUVERTE DE L'ORIC 


2 - Amener le curseur sur la ligne à modifier et aller 
par 'Ctrl' À jusqu'au premier caractère à changer. 


3 - Pour chaque caractère à remplacer, taper sur place 
le nouveau caractère. S'il y a des caractères à 
supprimer, les passer par mouvement de curseur : 
s'il y en a à insérer, aller (par curseur) à une 
ligne vide de l'écran et taper les caractères vou- 


lus. 
4 - Revenir à la ligne concernée par curseur pour co- 
pier par 'Ctrl' À les caractères à garder . Termi- 


ner par ‘'Return'. 


On peut modifier une ligne en autant d'étapes qu'on 
veut : il suffit de revenir sur la ligne, y faire d'au- 
tres modifications après avoir tapé 'Return'. Il est 
conseillé de vérifier par LIST que les modifications 
souhaitées ont bien été faites. 


- Modification du numéro d'une ligne : C'est un cas 
particulier du précédent : c'est maintenant le numéro 
qu'on change, mais attention ! Une fois qu'on a tapé 
"'Return' il y a deux lignes identiques, une à l'ancien 
numéro et une autre au nouveau. Cela peut être spécia- 
lement précieux pour économiser le temps de frappe 
lorsque l'on a toute une série de lignes très voisines 
à taper. 
Supposons que l'on veuille avoir (c'est un cas 

d'école) 

59 GOTO 1ÿ 

79 GOTO 1ÿ 

99 GOTO 19 

95 GOTO 12 


On tapera : 
59 GOTO 1ÿ ‘Return! 
puis, curseur sur le 5 : 
7 des ‘'Ctrl' À ‘Return! 
puis, curseur sur le 7 
9 des ‘Ctrl' À ‘Return! 
puis, curseur sur le 9 
95 des ‘Ctrl' À jusqu'au ÿ 2 'Return' 


À chaque fois, on n'aura sur l'écran que la dernière 
ligne tapée, mais en faisant LIST on s'aperçoit que 
l'on dispose de toutes les lignes voulues. 


42 


LA DECOUVERTE DE L'ORIC 


Exercice 3.4 


Modifier le programme A-1 pour qu'il calcule, non pas 
la surface du cercle, mais le volume de la sphère de 
rayon kRÀ. 


Nous donnons l'exercice moins pour le calcul que pour 
s'entraîner à effectuer la modification. On voit faci- 
lement qu'il suffit de changer le nom du résultat en V 
(il serait possible de garder S, mais nous voulons des 
identificateurs parlants). Donc, 3% doit devenir 39 
PRINT V, tandis que 2% doit devenir 29 V=4/3*xPI*Rt3. 


La modification de 39 est évidente, on amène le cur- 
seur sur le S par ‘Ctrl' À et on tape V 'Return'. 


Attention : tout caractère non copié par 'Ctrl' À est 
oublié. 


Pour l'instruction 29, on amène par 'Ctrl' À le cur- 
seur sur le S qu'on change en V, puis, curseur sur le P, 
on va à un endroit vide de l'écran taper 4/3*%x. On re- 
vient sur le P par curseur et on termine la ligne par 
‘'Ctrl' À jusqu'au 2 sur lequel on tape 3. 





Question : Ne manque-t-il pas quelque chose ? : si ! le 
‘Return’. 


Bien sûr, il aurait mieux valu modifier le programme 
A-2 ; c'est l'objet de l'exercice 3.5. 


Exercice 3.5 


Faire la même modification sur le programme A-2. 


Tout devrait bien se passer. 


Exercice d'entraînement 3.6 


Faire le passage du programme A-2 au calcul du volume 
du cylindre. 
(Exercice 2.1, solution en annexe). 


Avant de voir les commandes qui concernent les casset- 
tes, nous passons à un autre exercice qui va nous per- 
mettre d'aborder une autre sorte de problèmes. 


43 


LA DECOUVERTE DE L'ORIC 


Exercice 3.7 


Ecrire un programme analogue au programme A-2, mats 
qui, cette fois, demande la surface d'un cercle et en 
déduise le rayon. 


Le problème est que, cette fois, nous n'avons pas une 
formule connue "toute cuite" à appliquer. Il faut la 
chercher, encore que, pour cet exercice, ce ne soit pas 
trop sorcier. 


Néanmoins, et ce sera vrai dans tous les problèmes 
autres que ceux qui sont totalement évidents, l'ordina- 
teur n'est pas capable de trouver tout seul la solution 
d'un problème. Il faut la lui donner sous forme d'une 
suite ordonnée d'opérations à effectuer. Une telle suite, 
qui n'est rien d'autre qu'une recette, s'appelle chez 
les informaticiens savants un algorithme. 


Il est presque toujours plus difficile de trouver 
l'algorithme résolvant un problème que de programmer 
cet algorithme une fois qu'on l'a trouvé. 


Revenons à notre exercice. On trouve facilement que 
la formule à appliquer est R = V S/PI. Comment allons- 
nous traduire la racine carrée ? Eh bien nous avons le 
choix, ce qui arrive souvent en programmation, entre 
t.5 (puissance 1/2), ou appeler la fonction méthématique 
SQR (racine carrée) qui est une de celles dont on dis- 
pose en Basic. D'où deux solutions pour l'instruction 
29 du programme A-3. 


Programme A-3 


19 INPUT "SURFACE DU CERCLE":S 
29 R = SOR(S/PI) 

39 PRINT "RAYON = ",R 

4ÿ GOTO 1ÿ 


Autre forme de 2ÿ 
29 R = (S/PI)t.5 


Rangement d'un programme sur cassette 


(Si vous disposez d'un magnétophone et avez fait le 
branchement décrit dans la notice, ce qui est vivement 
recommandé). 


Voici maintenant des commandes spécialement utiles. 
En effet, jusqu'ici nous n'avons écrit que des program- 
mes très courts et peu nombreux. Néanmoins, même ainsi, 


44 


LA DECOUVERTE DE L'ORIC 


il est fastidieux de les taper plusieurs fois, et cela 
entraîne des risques d'erreurs. Or si nous faisons NEW, 
ou si nous éteignons l'ORIC simplement pour aller nous 
coucher, le programme est perdu (la mémoire vive RAM 
perd ses informations lorsqu'elle n'est plus alimentée). 
Heureusement, il y a les cassettes sur lesquelles on 
peut sauver des programmes et les relire par la suite. 


Sauvegarde 


Munissez-vous d'une cassette vierge rebobinée (sinon, 
vous la rebobinez avec la touche REW du magnétophone). 
Notons, à ce propos, qu'il est recommandé d'utiliser 
des cassettes courtes (il vaut mieux, étant donné les 
temps de lecture, ne ranger que peu de programmes sur 
chaque cassette) et de bonne qualité. 


Supposons que nous ayons un programme précieux en mé- 
moire, par exemple le programme A-3 que nous venons de 
faire. Placez la cassette dans le magnétophone et tapez : 


CSAVE "RAYON-CERCLE" 


Si votre magnétophone n'a pas de télécommande, il 
faut préalablement appuyer sur les touches RECORD et 
PLAY (simultanément). S'il a une télécommande convena- 
blement connectée, vous ne vous souciez de rien et 
l'ORIC affiche 


SAVING RAYON-CERCLE 


Lorsque Ready et le curseur réapparaissent, c'est fini : 
le programme a été écrit sur la cassette sous le nom 
que nous avons donné. 


Remarque : Le nom peut comporter jusqu'à 17 caractères. 
Il peut contenir des points ou des tirets. 


Chargement 


Pour renvoyer en mémoire un programme préalablement 
sauvegardé sur une cassette, on utilise la commande 
CLOAD "RAYON-CERCLE" (après avoir mis le magnéto en lec- 
ture). 


L'ORIC répond : 


Searching (recherche) 
puis Loading (lorsqu'il a trouvé le programme 
cherché) 


enfin Ready 


45 


LA DECOUVERTE DE L'ORIC 


On peut alors lister le programme ou l'exécuter par 
RUN. 


Si l'on obtient le diagnostic ?FILE ERROR-LOAD ABORTED, 
il faut rebobiner et réessayer, puis refaire l'essai 
avec une autre cassette sur laquelle on aura pris la 
précaution de faire une seconde sauvegarde. En cas 


d'échec : il faut employer la version lente des commandes 
magnéto 
CSAVE "nom'",sS et CLOAD ‘"nom'",s 


Sur ORIC ATMOS, on a souvent des messages Errors Found 
(erreurs rencontrées en lecture) alors que le chargement 
s'est tout de même bien passé. 


Noms abrégés 
On peut ne pas spécifier de nom dans la commande 
CLOAD. Par exemple, on aurait pu écrire : 
CLOAD "“" ou CLOAD "",S 


L'ORIC chargera le premier programme rencontré sur la 
bande. 


Chargement et exécution réunis 


Si la commande CSAVE a été de la forme 
CSAVE ‘"nom'",S,AUTO ou CSAVE ‘'nom'",AUTO 


le programme est exécuté automatiquement (c'est-à-dire 
sans qu'il y ait besoin de faire RUN) après son charge- 
ment. Le "AUTO" n'a pas à figurer dans la commande 
CLOAD. 


Vérification 


Après une sauvegarde, il est recommandé de rebobiner 
la cassette et de faire 


CLOAD ‘"nom'", V [,S] 


A ce moment, la machine lit le programme sur la cas- 
ette et le compare avec la mémoire. Si tout s'est bien 
issé, on à l'affichage @ Verify Errors Found. Sinon, 
us pouvez recommencer la sauvegarde, éventuellement 

mode S. 


46 


LA DECOUVERTE DE L'ORIC 


RECAPITULATION 


Nous avons maintenant vu les instructions les plus 
fondamentales des programmes : 


arithmétique 
INPUT - PRINT 
GOTO - END 


Nous avons vu les commandes les plus utiles : 


RUN et LIST 
CSAVE et CLOAD 


ainsi que les procédures de correction des programmes. 


Si l'énoncé de certains des mots-clés précédents 
n'éveille aucun écho en vous, nous vous conseillons, 
avant de poursuivre, de relire les pages qui les con- 
cernent. 


Nous sommes maintenant prêts à aborder la seconde 
série de programmes qui va nous permettre - toujours 
par variantes successives - d'augmenter notre "arsenal" 
d'instructions Basic. 


47 


LA DECOUVERTE DE L'ORIC 





48 


LA DECOUVERTE DE L'ORIC 


CHAPITRE IV 
BASES DE LA PROGRAMMATION 


Si vous voulez bien, nous allons jouer à un jeu. Les 
programmes de jeu forment une classe importante parmi 
les programmes pour P.S.I. Tous ne sont pas débiles : 
certains sont très élaborés et souvent très amusants. 
D'autre part, la présentation sous forme de jeu de cer- 
tains programmes pédagogiques les rend plus attrayants 
donc plus efficaces. Nous souhaitons qu'à la fin de la 
lecture de ce livre, vous soyez capables, vous aussi, 
d'en écrire. 


Pour le moment, notre jeu sera au départ un peu simple, 
mais il s'améliorera progressivement. Il s'agit du jeu 
"devinez un nombre". Le programme connaît un nombre 


(fixe) et il lit la devinette du joueur ; si le joueur 
a bien deviné, il affiche "gagné", sinon il affiche 
"perdu". 


L'INSTRUCTION IF 


Pour réaliser ce qui est demandé, de quoi avons-nous 
besoin ? D'une instruction capable de tester une condi- 
tion (qui sera ici nombre donné par le joueur = nombre 
caché), c'est-à-dire apprécier si elle est vraie ou 
fausse : si elle est vraie, d'aller à une certaine par- 


tie du programme (ici, afficher ‘gagné") sinon d'aller 
à un autre endroit du programme (ici afficher "perdu"). 


49 


LA DECOUVERTE DE L'ORIC 


Eh bien cette instruction existe, c'est l'instruction 
IF. Sa forme principale est : 


n IF condition THEN instruction 


Hs eee 
Le comportement est le suivant : si la condition est 
vraie, on effectue l'instruction qui suit THEN, puis 
l'instruction de la ligne suivante n' ; si la condition 


est fausse, on passe directement à l'instruction de la 
ligne n'. 


Un cas particulier est celui où l'instruction qui suit 
THEN est un GOTO : 


n IF condition THEN GOTO n'' 
n : 


n'! 


A ce moment, si la condition est vraie, on va en n'‘ 
si la condition est fausse, on va en n'. 


En fait, il suffit d'écrire l'un des deux mots THEN 
ou GOTO. 
Exemple : 19 IF A = B THEN 58 
ou 29 IF A+B<C GOTO 1ÿÿ 


Nous sommes prêts à écrire notre première version du 
programme "devinez un nombre". 


Programme B-1 


29 INPUT'"DEVINEZ UN NOMBRE";A 
39 IF A=3.25 GOTO 6ÿ 

49 PRINT'"'PERDU!" 

59 END 

6ÿ PRINT'GAGNE" 


Les instructions INPUT et PRINT sont déjà familières. 
L'instruction END fait terminer le programme une fois 
qu'on a inscrit PERDU ! Il n'y en a pas besoin après 6ÿ 
puisque c'est la dernière instruction du programme. 


L'instruction IF que nous employons est du troisième 
type : IF...GOTO. Le nombre à deviner est 3.25 : le nom- 
bre proposé lu au clavier est À ; la condition à tester 
est "Est-ce que À est égal à 3.25 ?" Eh bien, cela 
s'écrit À = 3.25. C'est simple. 


Du point de vue du fonctionnement du jeu, il y a beau- 
coup d'objections à formuler sur le programme B-1. Nous 


50 


LA DECOUVERTE DE L'ORIC 


le ferons bientôt, et cela nous aidera à découvrir de 
nouvelles instructions Basic. Mais la forme présente 
nous a permis d'utiliser l'instruction IF, qui est une 
des plus importantes de Basic, et nous avons encore 
quelques éléments à voir sur cette instruction, en par- 
ticulier les différentes conditions qui peuvent suivre 
le IF. 


La première forme de condition est : expression arith- 
métique relation expression arithmétique, comme 
2*A + 4<Bt3. 


Chacune des expressions arithmétiques est évaluée 
avant l'examen de la relation. Les opérateurs de rela- 
tion utilisables sont : 


= égal <> différent 

< inférieur <= inférieur ou égal 
\ 

> supérieur >= supérieur ou égal 


"différent" s'écrit inférieur ou supérieur, ce qui ne 
manque pas de logique. 


La deuxième forme de condition est une combinaison de 
relations de la première forme à l'aide des opérateurs 
logiques AND (et), OR (ou), et NOT (non). 


cl AND c2 est vraie seulement si les conditions cl et 
c2 sont toutes les deux vraies ; 


cl OR c2 est vraie dès qu'une au moins des conditions 
cl ou c2 est vraie ; 


NOT c est vraie si c est fausse, et fausse si c 
est vraie. 


- aller en 199 si à la fois C est supérieur à 2*A+4 et 
B est inférieur à 3 


IF C>2*xA+4 AND B<3 GOTO 1ÿÿ 
- imprimer OUI si X est extérieur à l'intervalle [1,2[ 
c'est-à-dire X<1 ou X>=2) : 
IF X<1 OR X>=2 THEN PRINT"'OUI" 


Exercice 4.1 


Reprenez le programme A-3. Essayez de fournir une 
surface négative. 


On obtient le message : 
? ILLEGAL QUANTITY ERROR IN 2ÿ 


51 


LA DECOUVERTE DE L'ORIC 


ce qui est normal, puisque l'on cherche à calculer la 
racine carrée d'un nombre négatif : il n'y a pas de cer- 
cle de surface négative. 


Un programme bien écrit doit se garantir contre de 
telles erreurs de l'opérateur : par exemple, un pro- 
gramme de jeu d'échecs doit vérifier que le coup propo- 
sé par le joueur est légal. 


L'objet de l'exercice est d'installer une telle garan- 
tie dans le programme A-3 : ajoutez au programme une 
instruction qui renvoie en 1# demander une autre sur- 
face tant que la surface fournie n'est pas positive. On 
peut également, en outre, imprimer un message de protes- 
tation. 


IF... THEN... ELSE 


Lorsque le test a la forme d'une alternative (si 
condition alors faire ceci sinon faire cela) l'ORIC per- 
met d'éviter les GOTO que donnerait la traduction 

IF condition GOTO n 
cela : GOTO p 

n ceci 

p suite. 


On peut en effet écrire : 
IF condition THEN ceci ELSE cela 


"ceci" et "cela" doivent être des instructions Basic 
(ou cf p 73, des suites d'instructions séparées par des 
‘deux-points') 


Exemple : IF A<B THEN PRINT "A<B'" ELSE PRINT "A>B" 


Le seul impératif est que tout l'ensemble forme une 
seule ligne Basic. Après l'exécution de la ligne, on se 
retrouve à la ligne suivante après avoir fait l'une des 
deux branches de l'alternative. Ainsi, la séquence 


19 IF A<B THEN PRINT "A" ELSE PRINT "B" 
29 PRINT "C" 


fait imprimer soit AÀ soit B 
€ C 


Ce n'est que si l'une des branches contient un GOTO 
qu'on ne se retrouve pas à la ligne suivante. 


52 


LA DECOUVERTE DE L'ORIC 


Exemple : Calculez Z = valeur absolue de X de trois fa- 
çons différentes : 
1 2 3 
59 Z=ABS(X) 59 Z=X 59 IF X<9 THEN Z= 
69 IF X<Q@ THEN Z=-Xx -X ELSE Z=X 


Bien sûr, notre programme B-1 pourrait s'écrire 


PROGRAMME B-16 


28 INPUT "DEVIMEZ LNH HOMERE "à A 
30 IF Ax3.25 THEN PRINT'GAGNE" ELSE PRINT"'PERCU" 


Nous venons maintenant de voir notre première instruc- 
tion véritablement élaborée. En effet, elle rend l'ORIC 
capable de prendre des décisions en fonction des diffé- 
rentes situations qui peuvent résulter des données. En 
fait, c'est vous qui prenez les décisions en préparant 
le programme, et si jamais vous oubliez un cas possible, 
le programme se comportera incorrectement si le cas se 
trouve réalisé. 


De décision en décision, le cheminement peut se rami- 
fier de façon complexe. 


Les ordinogrammes, encore appelés organigrammes, peu- 


vent alors être nécessaires pour s'y retrouver. 


Avant de passer aux améliorations de notre programme 
de jeu, nous allons étudier l'ordinogramme du programme 
B-1. 









Imprimer "devinez un nombre!" 
Lire À au clavier 


Imprimer "perdu" Imprimer "gagné" 


53 


LA DECOUVERTE DE L'ORIC 


Il est formé de blocs, qui spécifient les différentes 
opérations, reliés entre-eux par des flèches qui repré- 
sentent l'ordre de succession des opérations. La forme 
même du bloc indique au premier coup d'oeil la nature 
de l'opération. 


Parmi les formes de bloc, on distingue essentielle- 
ment : 


- le rectangle, qui a une seule entrée et une seule 
sortie et représente toute opération impérative ; 


- le losange, qui a une seule entrée, mais deux ou plu- 
sieurs sorties, et représente les opérations de test. 


On utilise les signes spéciaux et ©Q pour marquer 
le début et la fin du traitement. 


Il est toujours recommandé de tracer l'ordinogramme 
avant d'entreprendre la rédaction du programme : ce 
n'est jamais une perte de temps. 


Exercice 4.2 


Tracez l'ordinogramme du programme A-28. Tracez l'ordi- 
nogramme de l'exercice 4.1. 


Exercice 4.3 


A quels mots-clés Basic, vus jusqu'à présent corres- 
pondent les blocs ou signes 


CTI —4o 


PERFECTIONNEMENTS DU PROGRAMME B 


11 faut bien avouer que, dans sa première version, le 
jeu n'est pas particulièrement intéressant. Mais nous 
sommes maintenant en mesure de l'améliorer. 


La première objection ne sera résolue que tout-à-fait 
à la fin. C'est dommage, car elle concerne la crédibili- 
té même du jeu. 


En effet, il suffit de taper LIST pour avoir le lis- 
ting du programme, et par là-même prendre connaissance 
du nombre à deviner. Nous supposerons un certain temps 


54 


LA DECOUVERTE DE L'ORIC 


que le joueur ne connaît pas la commande LIST, ou alors 
qu'il "joue le jeu". 

I1 faut noter que cette objection se présente aussi, 
même dans des programmes plus élaborés : par exemple, 
si vous jouez à la bataille navale contre l'ordinateur 
et si vous connaissez bien le programme, vous pouvez 
faire imprimer les variables qui contiennent les coor- 
données des navires adverses. 


Supposant maintenant que vous jouez sans tricher, 
vous allez objecter que le jeu est très difficile, voire 
non équitable : vous avez peu de chances de trouver le 
nombre du premier coup, ce qu'exige le programme. Il 
est clair qu'il faut laisser plusieurs chances au 
joueur. 


Cela peut se faire très simplement : il suffit de 
remplacer l'instruction 5% du programme B-1 par 5% GOTO 
19 et on a maintenant droit à un nombre illimité de ten- 
tatives. 


Malgré cela, le jeu reste bien hasardeux pour deux 
raisons : 


- en cas d'échec, rien ne dit au joueur s'il est loin 
ou près du résultat ; 


- le joueur doit tomber pile sur la bonne valeur, c'est- 
à-dire doit fournir le nombre à la précision près à 
laquelle l'ORIC travaille, soit 10-9 près. 


Nous résoudrons le premier problème en calculant et 
en imprimant à chaque fois le pourcentage d'erreur E 
égal au nombre proposé moins le nombre à trouver, divi- 
sé par le nombre à trouver, le tout multiplié par cent. 


Le pourcentage d'erreur sera imprimé en valeur absolue, 
donc sans indiquer le sens de l'erreur, pour laisser 
une certaine difficulté au jeu. 


En ce qui concerne l'erreur possible dûe au manque de 
précision des PSI on ne comparera pas le nombre proposé 
au nombre à trouver, mais on considérera que la réponse 
est exacte si E, pourcentage d'erreur, est inférieur à 
0,5 %. 


Le problème de précision se pose à chaque fois que 
l'on a des calculs à effectuer. Pour le résoudre, il 
suffit de remplacer un test d'égalité pure du type IF 
A = B par un test sur la valeur de la différence entre 
les deux nombres, du type A-B < seuil, le seuil étant 
l'ordre de grandeur de la précision - ou plutôt de 


55 


LA DECOUVERTE DE L'ORIC 


l'imprécision ! - du P.S.I. C'est d'ailleurs en fait la 
valeur absolue de la différence qu'il faudrait tester. 


Notre programme devient 


FRÜOGRANME B -2 


z& INFUT"'DEVINEZ UN HOMBRE":A 
ZS E<100kABSCA-S. 2525.25 

GG IF ESY,S GOTO 6G 

4€ FRINT'ERREURMSE : "22" 

56 GOT ZE 

SA FRINT'GAGHE !" 


À la ligne 25, nous utilisons la fonction ABS (valeur 
absolue) qui fait partie de la bibliothèque mathématique 
du Basic de l'ORIC dont la liste complète est donnée en 
annexe. 


Si nous faisons tourner le programme tel qu'il est, 
nous obtenons, par exemple, l'affichage 


ERREUR 19.769238 % 


11 est bien évident que nous n'avons que faire de tant 
de décimales. Comment les supprimer ? Nous utiliserons 
une autre fonction de la bibliothèque, la fonction INT, 
qui prend la partie entière de l'argument cité entre 
parenthèses. 


Dans l'instruction 4ÿ, remplaçons E par INT(E). Cette 
fois nous obtenons un pourcentage entier. Là, c'est trop 
peu. Comment faire pour garder - disons - deux décimales ? 


Pour cela, nous multiplions E par 100 pour faire passer 
les deux décimales que nous voulons garder dans la par- 
tie entière, nous prenons le INT de ce produit, ce qui 
fait disparaître les autres décimales, puis nous redi- 
visons par 100 


INT(E*199)/190 


Telle est l'expression qui vient remplacer E dans 
l'instruction 49 du programme B-2, et nous avons main- 
tenant un affichage satisfaisant. 


Exercice 4.4 
On veut imprimer le nombre X avec D décimales. Ecrire 
l'instruction correspondante en mode direct. 


Pour constituer la version 3 de notre programme, nous 
voulons ajouter encore un petit perfectionnement. Il se- 
rait agréable, lorsque le nombre à deviner est trouvé, 


56 


LA DECOUVERTE DE L'ORIC 


d'imprimer le nombre de tentatives qui ont été néces- 
saires. C'est, en somme, le score du jeu. Pour cela, 

nous introduisons une nouvelle variable N, à laquelle 
nous ajoutons 1 à chaque fois qu'une tentative est 
faite sans succès, et que nous imprimons à la fin ; 
d'où le programme B-3 : 


PROGRAMME B-S. 


IHPUT'IEVINEZ Ui HOMBRE";A 
E=100HABSCA-S. 2533.25 

IF E<ü.S GÜTO 64 

H=H+1 

FRIHT"'ERREUR"; IHTCE*#106)/160; "7" 
GOTO Zù 

FRINT'GAGNE Ei";N+1; "COUPS" 


Aa QaNc 


Di en Le di Où Mini 


L'instruction 35 peut sembler paradoxale, mais n'ou- 
blions pas que le signe = n'a pas en Basic le même sens 
qu'en mathématiques. En Basic, il signifie : calculez 
l'expression qui est à droite, dont N + 1, et mettez le 
résultat dans la variable qui est à gauche. Ici, c'est 
la même variable, ce qui est parfaitement licite, et 
cela revient bien à incrémenter N. 


Question : La toute première fois qu'on passe sur l'ins- 
truction 35, on doit calculer l'expression N + 1 ; 
quelle valeur prend-on pour N ? 


Vous avez raison de poser cette question qui soulève 
le problème de l'initialisation des variables. Mais nous 
savons que lorsque l'on fait RUN, Basic met toutes les 
variables - dont N - à ÿ. Or, lorsque l'on commence, on 
a fait Ÿ tentative, donc la valeur initiale automatique 
de N convient. Si, dans un autre problème, on avait eu 
besoin d'une autre valeur initiale que ÿ, alors il au- 
rait fallu la fournir explicitement dans les premières 
instructions du programme ; ce point est fondamental : 
beaucoup de programmes échouent pour initialisation in- 
correcte de certaines variables. 


On remarque enfin, en 6%, que l'on imprime N + 1 et 
non N : c'est pour comptabiliser la dernière tentative, 
car lorsque le nombre est bon, on ne passe pas sur 
l'instruction 35. 


Exercice 4.5 


Comment faire imprimer quand même N en 69 ? 


57 


LA DECOUVERTE DE L'ORIC 


LES BOUCLES FOR. ..NEXT 


Nous pouvons maintenant nous attaquer à un autre dé- 
faut du programme dans son état actuel : il permet un 
nombre illimité de tentatives. C'est trop, bien sûr. Il 
faut autoriser plusieurs tentatives, mais en nombre li- 
mité, par exemple 5 ou 10. 


Cela peut se faire très simplement. En effet, nous 
avons, à tout moment, une mesure du nombre de tentati- 
ves faites jusque-là : c'est la variable N ; il suffit 
de la tester. On remplacera, pour ce faire, l'instruc- 
tion 5ÿ par la séquence 


45 IF N<19 GOTO 2ÿ 
59 PRINT "JE REGRETTE.VOUS AVEZ PERDU" 
55 END 


d'où le programme B-4A 

2& INPUT"'IDEVINEZ UN HOMBRE‘":;A 

25 E<1GG#kAERSCh-S. 2523.25 

3Q IF E<G.S GOTO 84 

46 FRINT'ERREUR"SINTIEX#I LG). '1 0, MA 

45 1F HC1& GÜTO 4 

Sa PRINT'JE REGRETTE.YOUS AYEZ FERDU 

SS END 

SE FRIHT'GAGHE EN": H+1: COURSE" 
Dessinons l'ordinogramme correspondant sans trop le dé- 
tailler 





Imprimer 
Mgagné" 








Non dépassée 





Dépassée 


Imprimer 
MPERDU" 





58 


LA DECOUVERTE DE L'ORIC 


Si nous simplifions encore cet ordinogramme pour en 
faire ressortir l'ossature, nous obtenons 






NEXT 





Limite 
dépassée ? 





NS 


Cette structure, très classique et tout à fait fonda- 
mentale étant donné son utilisation universelle, s'ap- 
pelle une boucle. Mais contrairement aux boucles que 
nous avons vues au début, ici le nombre d'itérations 
est limité d'avance : N joue le rôle de compteur de 
passages sur les opérations à répéter ; on lui donne 
une valeur initiale, puis on effectue le traitement à 
répéter pour les valeurs successives de N tant que la 
limite n'est pas dépassée. 


Le programme B-4A nous prouve qu'on peut réaliser des 
boucles, de façon parfaitement satisfaisante, avec les 
instructions que nous connaissons déjà. Pourtant, étant 
donné l'importance des boucles, Basic offre un jeu 
d'instructions spéciales qui permettent de les implanter 
encore plus facilement. C'est l'ensemble FOR...NEXT uti- 
lisé dans le programme B-4B. 


On voit combien il est facile d'utiliser de telles 
boucles : il suffit d'encadrer les instructions à répé- 
ter (29 à 49 dans notre exemple) par : FOR et NEXT. 


PROGRAMME B-45 10 FOR H=1 TO 15 





20 IHPFUT"'DEVINEZ UN NOMBRE"; A 

2S E=100#ABS(A-3.25)/8.2S 

3G IF E<G.S GOTO 63 

+G PRIHT"'ERREUR":IHTCE#10R2, "100, "A" 
45 HEXT H 

SG PRIHT"'IE REGFETTE. VOUS AYEZ FERTDU" 
535$ EH 

GE PRINT'GASHE EN"; M+1: "COUPS" 


59 


LA DECOUVERTE DE L'ORIC 


- en tête, une instruction FOR, de la forme 
FOR N = valeur de départ TO valeur limite 
ou, en français : 


pour N = valeur de départ jusqu'à valeur limite. 


s 


- à la fin, l'instruction NEXT N qui veut dire passer 
au suivant. Elle incorpore donc à la fois l'incrémen- 
tation de N et le test. 


Evident, n'est-ce pas ? 


Exercice 4.6 
Imprimer une table des carrés et des racines carrées 
des entiers de 1 à 10. 
L'instruction à répéter est d'imprimer sur la même li- 
gne, un nombre N, son carré et sa racine, soit 
29 PRINT N; N#N: SQR(N) 


Ceci est à faire pour toutes les valeurs de N de 1 à 
10. Soit : 


19 FOR N = 1 TO 1ÿ 
et on ne doit pas oublier de terminer par : 
39 NEXT N 


Exercice 4.7 


Implanter les instructions précédentes, et faire exé- 
cuter. Qu'est-ce qui manque ? 


(Indication : ne concerne pas la boucle). 


EXTENSIONS DE FOR...NEXT 


La forme que nous venons de voir n'est qu'un cas par- 
ticulier de la forme plus générale : 


FOR N = valeur de départ TO valeur limite STEP pas 


STEP annonce le pas d'incrémentation du compteur. On 
met 2, par exemple, si l'on veut que N progresse de 2 en 
2. 


60 


LA DECOUVERTE DE L'ORIC 


Exercice 4.8 


s 


On veut faire la même table qu'à l'exercice 4.6, mais 
seulement pour les valeurs paires de N. 


Si on ne met pas STEP et un pas, l'ORIC sous-entend 
un pas égal à 1. 


Les valeurs des bornes peuvent être quelconques et Le 
pas peut être négatif. Par exemple, si on voulait faire 
la même table que précédemment, mais en commençant par 
10, puis 9, 8 etc... on écrirait 


19 FOR N = 19 TO 1 STEP -1 


On n'est pas obligé de mettre des constantes comme 
bornes : on peut mettre des variables, ou même n'importe 
quelle expression arithmétique. Mais les expressions 
sont évaluées une fois pour toutes lorsque l'on entre 
dans la boucle, même si l'exécution de la boucle fait 
évoluer les variables qui interviennent. 


Ceci est utilisé surtout dans des écritures de la 
forme : 


FOR I = 1 TO N+1l ... 
ou FOR I 1 TO N STEP 2*%*K ... 


Rien n'oblige les paramètres à être entiers. Par exem- 
ple, pour étudier une fonction, on peut être amené à 
écrire : 


FOR X = -3.5 TO 4.82 STEP ÿ#.ÿ1 


La valeur limite qu'on donne est la valeur qui ne sera 
pas dépassée pour l'exécution de la boucle ; le test se 
passe exactement comme sur l'ordinogramme du programme 
B-4A : le compteur est modifié et on teste s'il est tou- 
jours compris entre les bornes ; si oui, on réexécute 
la boucle, sinon, on a terminé, et le compteur a une 
valeur hors des bornes. 


Exercice 4.9 


Pour quelles valeurs du compteur sont exécutées les 
boucles suivantes, et quelle est la valeur finale du 
compteur ? 


19 FOR I 1 TO 8.5 STEP 2 
5 FOR M 19 TO 3.5 STEP -1 


Le traitement à répéter dans une boucle peut lui-même 
contenir une boucle. On dit qu'on a des boucles imbri- 
quées. 


Ho h 


61 


LA DECOUVERTE DE L'ORIC 


Exercice 4.10 


On veut tracer une table des nombres de 1 à 10, avec 
leurs carrés mais avec 8 couples par ligne. 


Une solution est : 


19 FOR I 1 TO 9 STEP 2 

29 FOR J = ÿ TO 1 

39 PRINT I+J ; (I+J)*x(I+J), 
49 NEXT J:PRINT 

59 NEXT I 


le PRINT en 4ÿ assure le passage à la ligne 


La deuxième boucle doit toujours être complètement 
contenue à l'intérieur de la première : 


FOR I FOR I 
OR J FOR J 
É est correct est incorrect 
NEXT J NEXT J 
NEXT I NEXT I 
Remarque : Si en 39 on écrivait PRINT I+J : (I+J)t2, 


l'impression serait troublée par le fait qu'on trouve- 
rait 


7 = 49.9999901 et 92 = 81.9999901 
Pourquoi ? Eh bien c'est parce que l'interpréteur cal- 
cule xY sous la forme : eYlo9X sans faire de cas parti- 
culier pour y = 2, d'où des erreurs d'arrondi. 


On voit là une des causes d'inefficacité des inter- 
préteurs, alors qu'un programmeur en langage machine 
tient compte du cas particulier qu'il rencontre, et rem- 
place la puissance 2 par une multiplication, plus rapide. 


On peut omettre de répéter la variable qui sert de 
compteur dans le NEXT. Ainsi, dans l'exercice 4.6, on 
aurait pu écrire 3ÿ NEXT, et dans 4.10, 4Q NEXT... 5% 
NEXT - et le problème de l'ordre ne se posait plus. 


Un couple 49 NEXT J 59 NEXT I peut être remplacé par 
45 NEXT J,I (attention à l'ordre). 


Avec le couple FOR...NEXT, nous venons d'ajouter à 
notre arsenal un des outils les plus efficaces de Basic. 
Il nous reste à voir deux autres éléments de base pour 
lesquels nous revenons à notre programme de jeu, mais 
avant, une autre sorte de boucles permises par l'ORIC. 


62 


LA DECOUVERTE DE L'ORIC 
LA BOUCLE REPEAT...UNTIL (REPETER. . .JUSQU'A) 


La structure : 19 REPEAT 
20: 5 
39 ... 
49 UNTIL condition 
59 ... 


fait répéter les instructions 29 et 39 (par exemple) 
jusqu'à ce que la condition écrite en 4ÿ soit satis- 
faite : on passe alors à 5. 


A la différence de FOR, on ne connaît pas d'avance le 
nombre d'itérations qu'il faudra pour s'arrêter. 


La 'condition' a la même forme que dans IF. Il faut 
que les instructions entre REPEAT et UNTIL aient des 
chances de faire évoluer la condition, sinon on ne 
s'arrêtera jamais. Si l'on arrive au REPEAT alors que 
la condition d'arrêt est déjà satisfaite, il y aura 
quand même une itération d'effectuée. 


19 FOR I = 1 TO 19 STEP K 
59 NEXT 


peut s'écrire 


5 I1=1 
19 REPEAT 


59 I=I+K 
69 UNTIL I>1ÿ 


Il faut faire figurer l'incrémentation explicitement... 


Le programme B-1 avec nombre illimité de tentatives 
peut s'écrire 


19 REPEAT 
29 INPUT A 
39 UNTIL A=3.25 
49 PRINT "GAGNE" 


Bien sûr, on peut se passer de REPEAT...UNTIL puis- 
qu'elle peut être simulée par d'autres instructions 
comme on l'a vu, mais elle offre une écriture extrême- 
ment parlante. Son emploi a bon escient est donc recom- 
mandé. 


63 


LA DECOUVERTE DE L'ORIC 
L'HORLOGE TEMPS REEL 


Ce qui manque dans notre jeu actuellement, c'est le 
"sport". Certes, le joueur a droit à un nombre de ten- 
tatives limité, mais ce serait beaucoup plus spectacu- 
laire si le temps alloué pour deviner le bon nombre 
était limité. 

L'ORIC a ce qu'il faut pour cela. En effet, il possède 
une horloge temps réel, ce qui est intéressant pour sa 
catégorie de prix. 


Mais qu'est-ce qu'une horloge temps-réel, et à quoi 
ça sert ? Bien sûr, une horloge est faite pour donner 
l'heure, mais comment procède-t-on ? 


Dans le cas de l'ORIC l'horloge se comporte comme une 
case mémoire qu'on peut lire (c'est de cette façon que 
l'on obtient l'heure) ; mais cette case mémoire a un 
comportement un peu particulier : tous les soixantièmes 
de seconde, son contenu est diminué de 1 par un proces- 
sus extérieur au microprocesseur, qui fait intervenir 
un oscillateur, des divisions de fréquence et des inter- 
ruptions, et dont nous n'avons pas à nous soucier. 


Tout ce que nous avons besoin de savoir, c'est qu'il 
existe un couple de cases-mémoire d'adresses 630 et 631 
qui forment un nombre de 16 bits n. À la mise sous ten- 
sion, ce nombre vaut 65535 et il est décrémenté tous 
les soixantièmes de seconde (environ). 


n=(639)+256*(631) (les parenthèses signifient "contenu 
de"). 
A tout instant, 65535-n représente le nombre de soixan- 
tièmes de secondes écoulés depuis le dernier passage par 
zéro. Si l'on désire le temps en secondes, on prend 
(65535-n)/6ÿ. 


Oui, mais comment avoir le contenu des adresses 63ÿ 
et 631 ? Basic a ce qu'il faut pour cela. Il offre des 
moyens de lire ou écrire à toute adresse mémoire que 
l'on spécifie. 


e PEEK (x) fournit la valeur comprise entre 0 et 255 
de l'octet d'adresse x. x peut être fourni 
en décimal (Ex. 1999) ou en hexadécimal (si- 
gnalé par #, Ex. #3E8) 


Exemple : PEEK(@) fournit ® car il y a la valeur ÿ à 
l'adresse ÿ de la mémoire. 


Si le programme actuellement en mémoire commence par 
la ligne 19, alors ?PEEK(1283) ou ?PEEK(#53) donne 1ÿ. 


64 


LA DECOUVERTE DE L'ORIC 


On peut ainsi prendre connaissance du contenu de tout 
emplacement mémoire. Ainsi, pour notre horloge nous 
aurons : 


n= PEEK(639) + 256*PEEK(631) 


Mais l'ORIC a encore mieux. 


e DEEK (x) fournit la valeur combinée : 
PEEK(x) + 256*PEEK(x+1) 


On en a, en effet souvent besoin : à chaque fois qu'un 
nombre de 16 bits est rangé en mémoire dans deux octets 
consécutifs, avec l'octet de poids faible d'abord, com- 
me c'est l'habitude du microprocesseur de l'ORIC, le 
6502. 


Donc notre temps est donné par n=DEEK(63@). Mais il 
nous faut aussi pouvoir écrire dans la mémoire, pour, 
entre autres initialiser un intervalle de temps. 


e POKE x,y écrit à l'adresse x, la valeur y (y doit 
être compris entre 0 et 255, x entre 0 et 
65535). 


Exemple : essayez POKE 48ÿ999,65. Cela fait apparaître 
un À tout en haut de l'écran, car 65 est le code du À 
et 48000 est la première adresse de la mémoire d'écran. 


Si l'on veut mettre une valeur de 16 bits en deux oc- 
tets consécutifs de la mémoire, on dispose, sur l'ORIC, 
d'un POKE double : 


e DOKE x,y met en x (partie basse) et x+1 (partie haute) 
la valeur sur 16 bits y. x et y doivent 
être compris entre 0 et 65535 (en fait 65534 
pour x afin que x+1 reste inférieur à 65535). 


Exemple : essayez DOKE ÿ@,257 et vérifiez par ?PEEK(@): 
PEEK(I) que vous avez bien 1 et 1 (257-1+256*1). 


N.B. Dans les quatre opérations précédentes l'adresse 
peut toujours être fournie sous forme hexadécimale (#...) 
Dans DOKE, la donnée y peut l'être, mais pas dans PEEK 

il n'y a aucun diagnostic mais l'écriture n'est pas 
faite. 


On a donc un moyen facile d'initialiser l'horloge 
temps réel pour mesurer un intervalle de temps : DOKE 
639,65535. 


65 


LA DECOUVERTE DE L'ORIC 


Si l'on écrit 
19 DOKE 63ÿ,65535 


59 T=65535-DEEK(639) 


alors T est proportionnel au délai écoulé entre l'exécu- 
tion de 19 et l'exécution de 59 : on a donc une mesure 
de ce délai (pour l'avoir en secondes, il suffit de di- 
viser T par 60). 


On peut, au contraire, générer un délai : supposons 
qu'entre les instructions 19 et 29 on veuille respecter 
un délai d'une minute ; on écrit 


LQ 4": à 

15 DOKE 63ÿ,65535 

16 IF 65535-DEEK(63%)<36ÿÿ GOTO 16 
29 ... 


En 15, on fixe l'instant de départ. Ensuite, en 16, 
65535-DEEK(63@) est le délai écoulé entre 15 et la pré- 
sente exécution du 16 : il change à chaque fois car le 
temps passe. Tant que le délai est inférieur à 3600 
tierces = 60 secondes = 1 minute, on réexécute 16. Mais 
le délai avance sans cesse : il finira par être à 1 mi- 
nute, et alors on passera en 2ÿ. 


Notez que l'ORIC a un moyen plus simple pour cela 
WAIT x produit une attente de x centièmes de seconde. 
On pouvait donc écrire 


16 WAIT 6999 
C'est donc l'horloge temps réel qui va nous servir 
pour limiter le temps alloué au joueur. 


Comment ? C'est tout simple. On va, au début du jeu, 
initialiser le temps écoulé à ÿ 


5 DOKE 63ÿ,65535 


puis, à chaque tentative du joueur, on va tester si le 
temps n'est pas dépassé 


15 IF 65535-DEEK(63@)>729@ GOTO 59 


Exercice 4.11 


Quel est le temps alloué au joueur par l'instruction 
15 ? 


66 


LA DECOUVERTE DE L'ORIC 


On arrive donc au programme B-5 
FROGRANME B-5 


5 DOKE 630,69335 

1a FOR H=l TO 14 

15 IF 65995-DEEKS SG 17208 GOT 5 

24 IHPUT'ODEVIHEZ UM NOMBRE "à 

ES Ex AGXARSS AS, LS CS, LS 

aù IF E<4.5 GOTO 64 

4f PRIHT'ERREUR "3 IHTCE#1RE 1 Me" 

45 HEXT H 

SA PRINT'UE REGRETTE, VOUS AYEZ PERDU 

5 ENT 

Gé PRINT'GAGHE EH "ii "COURS ET MiINTÉCÉS En 
“ER 





SECONDES" 


On a également incorporé à la ligne 6@ l'impression 
du temps mis par le joueur pour trouver la solution. 


Exercice 4.12 


Reconstituer l'ordinogramme du programme B-5. 


Exercice 4.13 


Modifier l'instruction 6ÿ pour imprimer le temps au 
1/100ème de seconde (comme pour les compétitions de ski). 


Il reste un petit perfectionnement à apporter : lors- 
qu'on imprime "perdu", il serait bon de distinguer si 
c'est par dépassement de temps ou par trop grand nombre 
d'essais. C'est le but de l'exercice suivant. 


Exercice 4.14 


Lorsque le joueur a perdu, imprimer la cause de 
3 4 É 
l'échec, temps ou nombre d'essais. 


INSTRUCTION STOP, TOUCHES ‘Ctrl' C, COMMANDE CONT 


Notre programme de jeu est maintenant arrivé à un bon 
niveau de complexité. Par conséquent, des difficultés 
peuvent se présenter pour en effectuer la mise au point. 
Comment 1l'ORIC nous aide-t-il à les résoudre ? 


67 


LA DECOUVERTE DE L'ORIC 


Le premier outil est constitué par les messages d'er- 
reur imprimés par l'ORIC en cas de situation anormale. 
Par exemple, si jamais vous appelez la fonction SQR avec 
un argument négatif, vous aurez le message : 


?ILLEGAL QUANTITY ERROR IN numéro d'instruction. 


puis, Ready. est affiché, ce qui indique que l'ORIC est 
prêt à accepter une commande en mode direct. 


La commande directe la plus judicieuse à entrer dans 
un cas semblable est PRINT certaines variables. En effet, 
lors d'un arrêt de cette sorte, toutes les variables du 
programme sont conservées, vous pouvez donc demander 
leur impression en mode direct. Par exemple, si notre 
racine carrée à argument négatif dépend d'une variable 
X, nous taperons ?X. Là, nous voyons que X n'a pas la 
valeur que nous escomptions. Nous pouvons alors demander 
le LIST de l'instruction qui calcule X. Nous voyons 
alors qu'il manque une opération, et nous sommes prêts 
à corriger l'instruction. 


Attention, à partir du moment où nous faisons la moin- 
dre modification au programme, les variables ne sont 
plus conservées. Nous avons donc intérêt à examiner le 
plus possible de variables avant de commencer les cor- 
rections. 


Tel est le scénario habituel de correction des erreurs. 
Les messages d'erreur sont listés en annexe, avec une 
tentative d'analyse de leurs causes les plus fréquentes. 


Le procédé est différent s'il ne se produit aucune 
erreur suscitant un message alors que les résultats sont 
faux. Comment faire dans ce cas ? À ce moment, on va 
subdiviser le programme en petites étapes, entre les- 
quelles on va insérer des instructions STOP. Par exemple, 
si un programme a deux étapes, la première de 19 à 5ÿ 
et la seconde de 69 à 159, on intercalera un 55 STOP. 


Lorsqu'on arrivera en 55, l'ORIC imprimera : 


BREAK IN 55 
Ready 


et s'arrêtera. 

Notons déjà que le fait d'obtenir une telle impression 
signifie que la première étape s'est déroulée jusqu'au 
bout. Correctement ? Pour le savoir, puisque L'ORIC est 


arrêté, il vous suffit de demander l'impression directe 
des variables stratégiques. 


Supposons que tout soit correct. Nous voudrions main- 
tenant exécuter la deuxième étape. Eh bien, pour cela, 


68 


LA DECOUVERTE DE L'ORIC 


nous disposons de la commande CONT, qui veut dire "con- 
tinuez, maintenant que j'ai fait ce que je voulais lors 
de l'arrêt". Attention, vous ne pouvez employer CONT si, 
au cours de l'arrêt, vous avez modifié le programme. 


11 y a encore un cas possible. Supposons que, dans 
l'exemple ci-dessus, on n'obtienne jamais l'affichage 
de BREAK IN 55. Cela veut dire que, lors de la première 
étape, le programme entre dans une boucle sans fin. Com- 
ment savoir où on en est ? Il suffit d'appuyer sur les 
touches ‘Ctrl' et C. Cette combinaison simule une ins- 
truction STOP dans la ligne en cours d'exécution au mo- 
ment où l'on appuie : on obtient le message BREAK IN 25 
(par exemple). On relance l'exécution par CONT. L'examen 
de quelques variables et un listing de la zone du pro- 
gramme indiquée par le BREAK IN permettent, en principe, 
de dépister l'erreur. 


Un autre outil de dépannage est tout simplement 
d'ajouter, à intervalles réguliers, l'impression des 
principales variables ; il suffira ensuite, lorsque le 
programme sera au point, de supprimer les instructions 
d'impression superflues. 


LA "TRACE" 


Un dernier outil, bien pratique, de dépannage est ce 
qu'on appelle la "trace". Lorsqu'elle est activée dans 
une portion de programme, à chaque fois que l'on passe 
sur une ligne Basic, le numéro de cette ligne est systé- 
matiquement imprimé. On peut donc facilement suivre par 
où on passe, donc voir si un test s'effectue bien, ou 
si l'on boucle. On active la trace par TRON et on la 
desactive par TROFF. 


Exemple : le programme (idiot) suivant 


19 TRON 
29 REPEAT 
39 UNTIL I>1ÿ 


affichera [29] [39] [39] [34]... indéfiniment. 
Si vous ajoutez 25 I-1+3 vous aurez 


[29] puis 4 couples [25] [39]. 
Comme les impressions de trace troublent les impres- 
sions, on délimite les portions du programme soumises à 


la trace en les entourant de TRON...TROFF, qu'on suppri- 
mera une fois le programme au point. 


69 


LA DECOUVERTE DE L'ORIC 


RECAPITULATION 


Ce chapitre nous a permis de voir les outils de base 
du programmeur 


- les instructions fondamentales IF et FOR 
- la manipulation de l'horloge temps réel de l'ORIC 


- quelques aides à la mise au point des programmes. 


Nous sommes maintenant parés pour aborder les tech- 
niques élaborées de programmation. 


Question : Quelle est la différence entre STOP et END ? 


La seule différence est que STOP fait imprimer le mes- 
sage BREAK IN... alors que END ne le fait pas. 


On peut également reprendre par CONT après une ins- 
truction END. 


70 


LA DECOUVERTE DE L'ORIC 


CHAPITRE V 
PROGRAMMATION EVOLUEE 


INSTRUCTIONS DATA, READ et RESTORE 


Notre programme de jeu va maintenant nous conduire à 
des techniques plus sophistiquées. 


Supposons que l'on veuille jouer à plusieurs. IL nous 
faut donc maintenant une série de nombres à deviner. En 
effet, si le joueur N° 3 a vu que les deux précédents 
avaient à deviner 3.25, il n'aura pas trop à se creuser 
les méninges ! 


Le programme B-6A donne une solution. Pour simplifier, 
nous avons supprimé la limite sur le nombre d'essais au- 
torisés, mais, bien sûr, nous avons laissé la limitation 
du temps. 


Attention : Si vous avez laissé en mémoire le précédent 
programme B-5, vous avez intérêt à effacer la mémoire 
avec la commande NEW avant de taper le programme ci- 
dessous. Nous avons, en effet, renuméroté les lignes et 
la frappe superposée de B-6A sur B-5 donne une "salade" 
inintelligible. Cette renumérotation a pour but de re- 
donner un peu d'air au programme pour permettre les fu- 
tures adjonctions et modifications. 


PROGRAMME E-6f 


1a RERAD C 

2 DOKE 69069335 

30 IF 65235-DEEK6S9 23:72 GOTO 38 

4@ INPUT'GQUEL HOMBRE PROPOSEZ-VOUS" 3 A 
SA Ex AG#kABSE A-C 140 


71 


LA DECOUVERTE DE L'ORIC 


68 IF E<@.5 GOTO 11@ 

7@ FRINT'ERREUR "3; INTCE#199 53-128; "x" 

8Q GOT) 3a 

9@ PRIHT'TROPF TARD! LAISSEZ LA PLACE AU JOUEUR SUIVANT" 

1a@ GÜTO 18 

119 PRIHT'GAGNE EH "à; INTCÉ65335-DEEKS 630 52-,62/109; 
"SECOHDES" 

12Q GOTOQ 18 

208 DATA 3.25,7,63,2,121,449,0.475,18 

218 DATA 5.8,219.78.31,901.5,31,4.18.2,7 

Deux instructions nouvelles apparaissent dans cette 
version : READ et DATA. 


DATA sert simplement à spécifier une liste de cons- 
tantes séparées par des virgules ; l'instruction DATA 
n'est considérée qu'en relation avec une instruction 
READ ; sinon elle est "transparente" pour le programme. 


’ 


On peut placer une instruction DATA n'importe où dans 
le programme ; lorsque Basic arrive dessus, il n'en fait 
rien et il passe à l'instruction suivante. Ainsi, 299 
aurait pu être numéroté 55, et 219 aurait pu être numé- 
roté 75, par exemple. L'exécution serait quand même 
passée directement de 59 à 69 et de 79 à 8ÿ. Les données 
prises n'auraient pas été altérées. Ce qui compte, c'est 
l'ordre des différentes instructions DATA et l'ordre des 
données à l'intérieur d'une même instruction DATA. 


Au départ du programme (juste après le RUN),1la pre- 
mière donnée du premier DATA sera prise lors du premier 
READ exécuté. Puis, au fur et à mesure de l'exécution 
des READ successifs, la deuxième donnée du premier DATA, 
puis la troisième etc. puis la première donnée du deu- 
xième DATA et ainsi de suite. 


Dans notre exemple, comme il y a un READ à chaque nou- 
veau joueur, les nombres successifs à chercher seraient 
3.25, puis 7.63, puis 2 etc. soit 14 possibilités dif- 
férentes. 


Que se passe-t-il s'il y a plus de 14 joueurs ? Eh 
bien il y a une erreur : si l'on essaie un READ alors 
que la dernière donnée du dernier DATA a été "lue", le 
message ?OUT OF DATA ERROR IN... est affiché par l'ORIC. 


L'instruction RESTORE nous fait contourner l'obstacle : 
elle permet, en effet, de revenir au début des DATA. 
C'est-à-dire qu'après un RESTORE, un READ obtient de 
nouveau la première donnée du premier DATA puis... etc. 
Ici, nous allons donc reparcourir la même série de nom- 
bres à deviner tous les 14 joueurs. 


72 


LA DECOUVERTE DE L'ORIC 


Pour cela, nous avons besoin d'une variable J, qui va 
contenir le numéro de joueur. Quand ce numéro deviendra 
14 ou divisible par 14, il faudra faire un RESTORE. 


Mais, comment voit-on que X est divisible par Y ? 
Très simple : si X est divisible par Y, le quotient X/Y 
est égal à INT(X/Y) puisqu'il est entier. D'où le pro- 
gramme B-6B 


PROGRAMME E-6B 


19 J=J+i: PRINT "JOLIEUR HO, "5 

20 READ C: DOKE 630,65335 

34 IF 695935S-DEEK( 6342272904 GOTO FA 

49 INPUT"'QUEL NOMBRE PFROPOSEZ-VOUS" ; À 

90 E=1GR#ARSCA-CH/C: IF E<@,S GOTO 9@ 

6@ PRINT"'ERREUR "3 IHTCE#19@9/-18@:"%": GOTO 34 

7@ PRINT'"TROP TARD! LAISSEZ LA FLACE AU JOUEUR SUTYAHT" 

75 IF INTCJ-141=J/14 THEH RESTORE 

&a GOTO 18 

90 PRINT'GAGHE EH "3 IHTÉC 695358 -DEEKC 690 2 41-,6 2-1@@; 
"SECONDES" 

109 GOTO F3 

208 DATA 3.25,7,.63,2,121,449,0,075.18, 5.8 

219 DATA219,78,931,901.5,31,4,18,2.7 


Une variante supplémentaire, par rapport au programme 
B-6A, vient de ce qu'il y a plusieurs instructions à 
certaines lignes. On peut, en effet, mettre plusieurs 
instructions par ligne à condition de les séparer par 
le caractère deux-points (:). Cela rend les programmes 
plus compacts, mais aussi moins lisibles. 


Bien entendu, si la ligne "l'"' renferme plusieurs ins- 
tructions, un GOTO 1 conduira à la première, pas au mi- 
lieu de la ligne ! Donc si une instruction doit être 
cible d'un GOTO ou d'un IF, elle doit être seule sur sa 
ligne, ou en tête de ligne. 


Autre variante : le nombre 5.8 est passé du début du 
deuxième DATA à la fin du premier. Cela ne change abso- 
lument rien à l'ordre des données qui seront prises en 
compte. 


Exercice 5.1 


Une autre méthode pour éviter l'épuisement des données 
serait d'ajouter, en fin de série, une donnée bidon dif- 
férente des nombres qu'on veut traiter, par exemple 
99999, et que l'on teste : si on la trouve, on fait RESTORE. 
Réalisez une version du programme qui utilise cette méthode. 


73 


LA DECOUVERTE DE L'ORIC 
DIM ET TABLEAUX 


Nous abordons maintenant une importante notion qui va 
fortement augmenter la puissance de traitement mise à 
notre disposition. 


Nous jouons toujours à plusieurs joueurs, que nous 
limitons à 14, par exemple. Ce que nous voulons de sur- 
croît c'est qu'une fois que tous les joueurs ont effec- 
tué leur partie, un tableau récapitulatif des scores 
obtenus, en nombre de secondes, soit affiché. 


Pour ce faire, il faut introduire une nouvelle varia- 
ble : SC. On obtient alors le programme suivant 


PROGRAMME E-7A 


14 FOR Jæl TO 14:PRINT "JOUEUR HO, "il 

2Q READ C: DOKE 639,65335 

3A SC=c65933-DEEKC 636 03/68: IF SC+12Q GOTO 74 

4Q INPUT'QUEL NOMBRE PROPOSEZ-VOLUS "A 

50 En1G@XxABSS A-Co-C: IF E<G,S GOTO 34 

68 PRIHT'ERREUR "5; IHTCE#1@@2-14g;"%x": GOTO 3@ 

7@ PRIHT'TROP TARD! LAISSEZ LA PLACE AU JOUEUR SUTYAHT" 
75 IF INTSJ-1d4uel-14 THEN RESTORE 

ga GOTO 109 

9G FRINT'GAGHE EM "INT SCHL GE 1108: "SECONDES" 

18 MEXT .J 

114 PRINT "SCORE = "3 SC: END 
20@ DATA 3,29.7.63,2, 121, 449,0 
214 DATAZI0,78,51,901.5,31, 4.1 


Mais cette solution n'est pas satisfaisante. En effet, 
ce programme n'imprimera jamais que le score du dernier 
joueur. Ce dont nous avons besoin, c'est un score pour 
chaque joueur, c'est-à-dire de 14 variables semblables, 
attachées chacune à un joueur J. 


Basic a un outil pour cela. Il permet, en effet, que 
SC soit une variable multiple dont SC(1) sera le premier 
élément, SC(2) le deuxième etc. 


Le numéro de l'élément voulu est mis entre parenthèses : 
il s'appelle l'indice. L'indice peut être une variable 
SC(I) est le I ième élément, ou même une expression 
SC(3*I-4). 


Une telle variable multiple s'appelle un tableau. Il 
faut prévenir Basic du fait qu'une variable est un ta- 
bleau et du nombre d'éléments (cela pour réserver de la 
place en mémoire). Cela se fait par une instruction DIM. 


74 


LA DECOUVERTE DE L'ORIC 


Pour notre exemple, nous avons : DIM SC(14). En fait, 
ici on réserve la place pour 15 éléments, car l'indice ÿ 
est utilisable. 


Bien entendu, l'instruction DIM doit être exécutée 
avant toute opération sur la variable concernée ; en 
revanche, elle ne doit être exécutée qu'une fois. 


L'instruction DIM n'est pas nécessaire tant que la 
valeur maximum de l'indice ne dépasse pas 10 : en effet, 
l'ORIC réserve automatiquement la place pour 10. Si la 
dimension du tableau doit être plus petite que 10, 
l'instruction DIM est quand même utile car elle libère 
de la place. 


Plusieurs tableaux peuvent être dimensionnés à l'aide 
d'une même instruction : DIM A(25), B(59). 


La valeur maximum assignée à l'indice peut être une 
variable (qui vient d'être initialisée) : DIM A(N). 


Utilisant ces propriétés, nous arrivons au programme 
B-7B 
PROGRAMME E-7R 


5 Dim SC 14) 
1 FOR Jei TO 14: PRINT "JOUEUR HO, "iJ 
24 READ C: DÜKE 639,699 
99 SCC Jet 6553S-DEEKRC 630 02-68:IF SCCJu+128 GOTO FA 
4A IHPUT'QUEL HOMBRE FROPOSEZ-VOUS" A 
45 SCC .Jiec 6SS3S-DEEK( 650 0 2-64 
SA Es140#AB8CA-Coh-C: IF E<A,S GOTO 54 
6 PRIHT'ERRELUR "3 IMTÉE#1@@ 5-14; "4": GOTO 34 
7@ PRINT'TROF TARD! LAISSEZ LA PLACE AU JOUEUR SUTYAHT" 
75 IF INTéJridi=l/14 THEM RESTÜRE 
62 GOTO 188 
9@ PRINT'GAGHE EH "3 IMTÉ SCC Jo4108 1-10; "SECONDES" 
128 HEXT J 
118 PRINT "JOUEUR SCORE" :FRIMT 
128 FOR Isi TÙ 14 
139 FRIHT " Mal INTE SCC I KIABI 1 MEMT T 
2g@ DATA 3,.25,7,63.:2,121.449.0.075,18, 5.8 
214 CATAS10,79.31,9491.5,31,4.18.8&,7 
L'instruction 45 permet de comptabiliser le temps 
d'hésitation à répondre à L'INPUT. 


Nous laissons maintenant notre jeu de côté pour quel- 
ques instants pour voir plusieurs compléments sur les 
tableaux. Vous avez tout intérêt à sauvegarder ce pro- 
gramme sur cassette grâce à l'ordre CSAVE. Ensuite vous 
pourrez effacer la mémoire par NEW, votre ORIC sera dis- 
ponible pour quelques exercices. 


75 


LA DECOUVERTE DE L'ORIC 
GARNISSAGE D'UN TABLEAU 


L'instruction d'entrée INPUT peut être mise dans une 
boucle du type : FOR I=1 TO 19 :INPUT A(I) :NEXT I. 


On aimerait bien savoir à chaque instant quel élément 
doit être introduit et avoir des messages imprimés tels 
que : 


A(1)? 
A(2)? etc. 


Comme le message comprend un élément variable (la va- 


leur de l'indice), la forme INPUT "TEXTE'";... ne con- 
vient pas. Il faut utiliser un PRINT qui se termine par 
point-virgule (;) pour taper la valeur sur la même 
ligne : 


19 FOR I = 1 TO 19 
29 PRINT "A(";I:")"; 
39 INPUT A(I) 

4ÿ NEXT I 


SOMME ET MOYENNE DES ELEMENTS D'UN TABLEAU 


Les éléments d'un tableau peuvent représenter les dif- 
férentes observations statistiques d'une grandeur, par 
exemple les tailles des différents élèves d'une classe. 
La première opération statistique à effectuer sur une 
distribution est de calculer sa moyenne :; pour cela, il 
faut d'abord en calculer la somme. 


Pour calculer cette somme, nous utiliserons une va- 
riable S initialisée à ÿ et à laquelle, dans une boucle, 
seront ajoutés successivement chacun des éléments : 


19 DIM A(N) 
29 REM NORMALEMENT INTERVIENT ICI LA LECTURE 
DES ELEMENTS 
39 S=0 
49 FOR I=1 TO N 
59 S=S + A(I) 
69 NEXT I 
79 M=S/N 
89 PRINT "SOMME= ":S,"MOYENNE= ":;M 


L'initialisation de S à ÿ est effectuée en 3ÿ ; cette 
initialisation est superflue en début de programme ; 
elle peut être nécessaire si on arrive en 39 après avoir 
fait d'autres opérations. 


76 


LA DECOUVERTE DE L'ORIC 


En 29 apparaît une nouvelle instruction : REM (abrévia- 
tion de remarque). Elle n'influe aucunement sur la mar- 
che du programme, mais elle permet d'y incorporer des 
commentaires explicatifs, ce qui est souvent utile 
(bien entendu, ces commentaires consomment de la place 
mémoire). 


Exercice 5.2 


Calculer la variance de l'ensemble des éléments A ci- 
dessus. 
L.(Ai-M)? 
Vs ER Es 
N-1 


Les tableaux sont particulièrement indiqués pour re- 
présenter des vecteurs d'un espace vectoriel sur K. Par 
exemple A(1), A(2), A(3) seront les trois composantes 
du vecteur + dans l'espace à trois dimensions. On verra 
plus loin que Basic permet aussi la manipulation de ma- 
trices. 


Exercice 5.3 


Etant donné les deux vecteurs U et V d'un espace à N 
dimensions, calculer leur produit scalaire (zu;v;). 


NOMBRES AU HASARD — FONCTION RND 


Nous sommes maintenant arrivés au moment de résoudre 
un des problèmes qui nous avait le plus préoccupé au dé- 
but de notre jeu : comment faire pour que, même s'il 
triche, le joueur ne puisse trouver d'avance le nombre 
à deviner ? 


Le mieux est que l'ordinateur ne connaisse pas lui- 
même ce nombre à l'avance, c'est-à-dire qu'il le tire au 
sort au moment de l'utiliser. 


Oui, mais comment un ordinateur dont le comportement 
doit être le plus déterministe et le plus prévisible 
possible peut-il donner des nombres aléatoires ? 


À priori, cela semble nuisible. Eh bien, et c'est pa- 
radoxal, il existe des algorithmes qui font appel à des 
calculs bien déterminés, qui donnent ce que l'on appelle 
des séries pseudo-aléatoires, c'est-à-dire des suites de 
nombres bien déterminés, mais ayant des propriétés 


77 


LA DECOUVERTE DE L'ORIC 


statistiques telles que l'on puisse considérer que tout 
se passe comme si les nombres avaient été tirés au ha- 
sard. 


Dans ce contexte, le terme "nombre au hasard" ne peut 
s'appliquer à un nombre isolé, c'est seulement au niveau 
d'une suite (nombreuse) de nombres qu'il a un sens. 


À quoi peuvent bien servir de telles suites ? Elles 
servent pour des calculs de simulation dans lesquels il 
faut tenir compte de phénomènes aléatoires. Par exemple, 
supposons que l'on veuille simuler dix ans d'exploita- 
tion d'une propriété agricole. Un des éléments interve- 
nant peut être la production de blé d'un certain champ, 
on sait que, quoi qu'il arrive, cette production est 
comprise entre 10 t (année aux conditions atmosphériques 
défavorables, mauvaises graines etc.) et 15 t (année 
réunissant exceptionnellement tous les facteurs favora- 
bles). 


Pour simuler les aléas dûs à des causes mal connues, 
le mieux est, pour chaque année, de tirer au hasard un 
nombre entre 10 et 15 : ce sera le meilleur moyen d'ob- 
tenir, dans notre simulation sur dix ans, un certain 
nombre de bonnes années et de mauvaises années, repré- 
sentatif de la réalité. 


En fait, ici, on ne tirera pas un nombre réparti uni- 
formément entre 10 et 15 : on cherchera à reproduire une 
loi de probabilité obtenue par observations ou répondant 
à un modèle. 


On voit que les nombres au hasard peuvent être très 
utiles. L'ORIC peut nous en fournir. Il suffit de faire 
Y=RND(X) pour obtenir un nombre au hasard compris entre 
ÿ et 1. 


Si X est > ÿ, on génère différentes séquences pseudo- 
aléatoires : des appels successifs avec la même valeur 
de X>ÿ, donnent les éléments successifs d'une même suite 
(le nombre obtenu change à chaque appel, il fait partie 
de la même suite). En changeant la valeur de X, on chan- 
ge de suite. 


Le plus souvent, on utilisera RND(1). 


Le nombre obtenu étant compris entre ÿ et 1, c'est-à- 
dire de la forme ÿ.232745, il faudra lui faire subir 
une transformation pour répondre à notre problème. D'une 
façon générale, il faut obtenir une série de nombres Y 
comprise entre deux valeurs À et B. L'expression sui- 
vante permet d'obtenir ces nombres : 


Y= A+(B-A)*RND(1) 


78 


LA DECOUVERTE DE L'ORIC 


Appliquons ceci dans le programme B-8 pour obtenir un 
nombre compris entre ÿ et 194 


PROGRAMME B-5 


5 INPUT'NOMBRE DE JOUEURS "3H :DIM SC<Hoi 

18 FÜR J=i TO M:PRINT "JSOUEUR HO, "3.1 

24 C=i+SS%#RNO( 12 :DOKE 630,63535 

ga SCC Je CSSSS-DEEKÉ 630 02-68: IF SC J5>124 GOTO 74 
44 INPUT"'QUEL NOMBRE FROPOSEZ-YOUS" ; A 

45 SC Jet 6SSSS-DEÉER 680 : 3/64 

SG E=108#ABS A-Ci/C: IF Eéi GOTO 3@ 

6@ PRIHT"'ERREUR "3: IHTCE#1992-1@8;"%": GOTO 3 

79 PRINT"'TROP TARD! LAISSEZ LA PLACE AU JOUEUR SUIYANT" 
88 SCCJa=g :GOTO 198 

3Q PRINT'GAGNE EH "3 IMTCSC( J 2x 100 2-10: "SECONDES" 
95 SCC Joei+INTÉ( 12@-SC6 Jii-zA 

1A8 MEXT J 

118 PRINT "JOUEUR SCORE" :PRIHT 

128 FOR Iæi TO H 

138 PRIHT " il, INTESCC I 2419 0-184 :HEXT I 


Le changement le plus notable est donc dans l'instruc- 
tion 29 où le nombre à chercher est maintenant tiré au 
hasard. On pourrait le rendre encore plus aléatoire (en 
effet, au départ du jeu, on aura toujours la même série 
de nombres) en l'indexant sur le temps, en écrivant, par 
exemple 


7 T=65535-DEEK(63@);X= T-1YYx*INT(T/199) 
29 C=1+99%*RND(1+X) : DOKE 639,65535 


La ligne 7 a pour effet de mettre dans X les deux chif- 
fres de droite du temps. Si T = 2873, INT (T/199) est 
égal à 28 et X sera égal à 2873-2800 soit 73. 


Dans ces conditions, selon le temps écoulé depuis la 
mise sous tension, une série différente sera générée. 
D'autres améliorations ont été introduites et ont légè- 
rement facilité le jeu. Par exemple, on a mis la barre 
à 1 %, mais vous avez toute liberté de jouer sur cette 
barre et sur la limite de temps. 


Le nombre N de joueurs est désormais variable ; 

Le score est donné en nombre de points allant de 9 à 5 
(9 si le joueur n'a pas trouvé dans les temps, 5 s'il a 
trouvé très vite). 


79 


LA DECOUVERTE DE L'ORIC 


Exercice 5.4 


Mesurer la qualité statistique du générateur de nom- 
bres au hasard de Ll'ORIC. 


Pour cela, nous allons tirer 1999 nombres au hasard, 
compris entre -1 et +1. Calculons ensuite moyenne et 
variance (valeurs idéales ÿ et 1) ainsi que les effec- 
tifs des 1ÿ classes 


41.1 4 3 4 


[-1,-41;0-4 ,-2]...(9,21...[8, 1] (valeur idéale 199). 


Le programme suivant est une des solutions possibles 


19 FOR I=1 TO 1999 
29 N=(-1)+2*RND(1) 
39 S=S+N:S2=S2+Nt2 
49 J=1+INT((N+1)*5) 
59 Cc(J)=Cc(J)+1 


69 NEXT I 
79 M=S/1999@:V=(S2-19ÿ4xMt2)/999 
89 PRINT'MOYENNE =";M,'"VARIANCE ="; V 


99 PRINT'CLASSES" 
199 FOR I=1 TO Iÿ:PRINT C(I);:NEXT 


Attention, il ne se passe rien pendant 1 minute et demie. 
Soyez patient !... 


TABLEAUX MULTIDIMENSIONNES 


Perfectionnons notre jeu, en permettant à chaque jou- 
eur de disputer plusieurs parties et en affichant les 
scores de chacune de ces parties. 


L'ORIC permet de réaliser des tableaux à double-entrée 
(dits aussi : tableaux à deux indices, ou à deux dimen- 
sions). 


Pour ce faire, on utilise une instruction DIM de la 
forme 


DIM SC(NJ,NP) 


s'il y a NJ joueurs et NP parties. Le score du joueur J 
à la partie P sera désigné par SC(J,P); d'où le pro- 
gramme B-9 page suivante. 


80 


LA DECOUVERTE DE L'ORIC 


FROGRAMME B-5 


14 INPUT'HOMBRE DE JOUEURS "3H 

28 INPUT'COMBIEH DE PARTIES "à: HP 

39 DIM SCCHJ, NF 

44 FOR Pæei TO HPF:FOR Jei TO MI 

S@ PRINT "JOUEUR MO, "ai PARTIE "ir 

6@ Cel+SSXRNDE 19 :DÛKE 65, ESS 

FA SCI, Fer CSS SS-DEERC 688 3 0,64: IF SCE SJ, Poele GOT 114 
6Q INPUT'NOMBRE PROPOSE "A 

85 SC .J, Fc GSSSS-DEEKC 636 3 4-60 

90 E=19R#AB5S<A-Ci-C: IF Ef1 GOTO 1534 

188 FRINT'ERREUR "3 INTCE#18@ 4-14 "k"ts GOTO FA 

119 PRINT'TROP TARD!I LAISSEZ LA PLACE AL JOUELR SLTYANT® 
120 SC, Fo :COTO 154 

139 PRINT'GAGNE EM M TNTE BCE JFK GG ee LA: "SECONDES" 
149 SC J, Pom l+TNTeE 1E@- SCC I, Po ué à 

190 HEXT JF PRINT PRINT 

164 PRINT "JOLEUR Mi:FOR Fei TO WF 

179 PRINT'PARTIE "Fi NET F PRINT PRINT 

198 FOR ei TO NJ :PRINT " "als 

199 FOR Fæi TO HF :PRIMT " MISCE JP 

26Q HEAT F:PRIMT :MEXT I 


Ces tableaux rectangulaires s'appellent, en mathéma- 
tiques, des matrices dont les éléments sont répartis en 
lignes et colonnes. Les matrices ont de nombreuses ap- 
plications : celles-ci sont donc réalisables sur l'ORIC. 


Exercice 5.5 


Ecrire un programme qui calcule le produit C de deux 
matrices A et B (rappel de la formule de définition 

AD 
Cij= kair Pr; - 

Ce qui vient d'être exposé concernant les tableaux se 
généralise : le nombre de dimensions peut être quelcon- 
que ; à trois dimensions, les éléments sont répartis en 
plans, lignes et colonnes. La seule restriction formelle 
au nombre de dimensions est que l'instruction DIM doit 
tenir en 80 caractères. Mais d'autres limitations inter- 
viennent auparavant : la taille mémoire restant dispo- 
nible ne doit pas être dépassée. 


81 


LA DECOUVERTE DE L'ORIC 
MANIPULATION DES CHAINES DE CARACTERES 


Il nous reste encore une amélioration à apporter à 
notre programme. En effet, il serait souhaitable que, 
dans l'impression des résultats, ce soit le nom de cha- 
que joueur qui soit écrit, et non son numéro. 


Nous allons voir que cela est possible. IL est indis- 
pensable, en effet, que l'ordinateur permette de mani- 
puler des textes ou des noms. Il faut bien, en gestion, 
manipuler le nom des clients ! 


L'ORIC admet deux sortes de variables : les variables 
numériques, que nous connaissons déjà, et les variables 
alphanumériques, ou chaînes de caractères. Le nom d'une 
variable chaîne se forme comme celui d'une variable nu- 
mérique, en ajoutant un $ à la fin : 


À : variable numérique ; 
A$ : variable alphanumérique. 


Concurremment, dans le même programme, les variables 
distinctes À et A$ peuvent être utilisées. 


Seuls les deux premiers caractères du nom d'une varia- 
ble sont pris en compte (à part le $#) : AL$# et ALFAS# 
sont la même variable. 


Il est possible de former des tableaux de chaînes de 
caractères DIM NOMS(N) réserve un tableau de N chaînes 
de caractères, chacun des éléments pouvant comporter un 
nombre variable de caractères. 


Pour affecter une valeur à une chaîne de caractères, 
l'instruction la plus simple est l'affectation classi- 
que : Ag='"BONJOUR". 


Notez que la valeur attribuée est entourée de guillemets. 


On peut aussi "lire" la variable au clavier par INPUT 
A#. Dans ce cas, il n'est pas nécessaire de mettre 
BONJOUR entre guillemets, car l'ORIC s'attend à une 
chaîne de caractères. 


On peut enfin utiliser READ et DATA. Dans le DATA, les 
chaînes sont normalement sans guillemets, sauf si elles 
contiennent un caractère "spécial" comme espace, vir- 
gule ou deux points : 


19 READ A$,B$# 
29 DATA BONJOUR,"AU REVOIR" 


Nous sommes maintenant ‘"parés'" pour comprendre le pro- 
gramme B-10. 


82 


LA DECOUVERTE DE L'ORIC 
PROGRAMME B- 16 


1@ IHPUT'HE,DE JOUEURS, MBQDE PARTIES "HJ, NF 

2 DIM NOMSE HI, SC HI, HF 

34 FOR ei TO HI: PRIHT'MHOM DU JOUEUR MO "ai 

35 INPUT MNOMSC JS) :MEXT .] 

40 FOR F=1i TO HP:FOR Ji TO MH. 

54 PRINT "JOUEUR HO, "Midine Ms MONMSE Jai", SPARTIE iF 

64 Ce1+SS#RMDE 10 :DOKE 630, 65845 

79 SC J, Posté 6SS3S-DE SOIF SCCJ, Pasta GOTA 114 
84 IHPUT'HOMBRE PROPOSE î 
65 606, Ps SSSSS-DEERS 634 2-60 

9ù E=1A2#ARSCA-CieC: IF E<1 GOT 154 

188 PRIHT'ERRELUR "3; JHTCEX1@0 310; "4": GOTO FA 

119 PRIHT'TROF TARD! LAISSEZ LA PLACE AU JOUELR SUTYANT" 
129 SCC J,Poe@ :GOTO 156 

139 PRINT'GAGHE EH "3 IHTE SC I, Po 168 0188 PSECONDES" 

149 SCC, P ue l+INTE 6 1-0, Fée 1 

158 HEXT J,P PRINT :FRIHT 

169 PRINT "JOUEUR "5 :FÜR PFei TO WP 

179 FRINT'PARTIE "Pi :HMEXT PF :FRINT :PETHT 

188 FOR Je1i TO HJ :PRINT HOMSC.IS, 
198 FOR Fæi TO MP :PRINT ? Misc JSF 
200 HEXT P:PRIHT :HES#T 


Dans le programme précédent, nous ne faisons que lire 
un nom, le ranger dans NOMS(J) pour le mémoriser et 
l'imprimer un peu plus tard. C'est souvent le seul trai- 
tement à effectuer sur les chaînes de caractères. 














Mais, dans certains cas, on doit effectuer des traite- 
ments sur les chaînes, comme des comparaisons, des ex- 
tractions, des conversions etc. Nous voyons maintenant 
les opérations de ce genre disponibles sur l'ORIC. 


Comparaison : Une instruction telle que IF Aÿ=B#ÿ GOTO ... 
permet de comparer les deux chaînes A$ et B#. Les appli- 
cations sont nombreuses : on peut, par exemple, vérifier 
si un mot appartient à un dictionnaire ou si un nom fi- 
gure dans une liste de personnes autorisées... Une autre 
comparaison, telle que IF Ag<B$... est également utile 
en effet, le mot Ag est considéré comme inférieur à Bÿ 
s'il le précède dans l'ordre alphabétique, d'où un moyen 
de classer des listes de noms par ordre alphabétique. 


Concaténation : L'opérateur + appliqué à deux chaînes de 
caractères produit leur juxtaposition 


"BON" + "JOUR" fournit BONJOUR. Tapez 
AG = "NJ" 
B3 = "UR" 


83 


LA DECOUVERTE DE L'ORIC 


Cÿ = "'BO'"+A9+"O0"+Bg 
?2Cg là encore,vous obtenez BONJOUR 


Chaîne vide : C'est la chaîne formée de 0 caractère. 
Ag="" fournit à AS la valeur 'chaîne vide' ; quel que 
soit X#, X$+A$ sera identique à xÿ. 


Extraction de sous-chaînes : L'ORIC possède un certain 
nombre de fonctions permettant la "manipulation" des 
chaînes de caractères. Si le nom de la fonction se ter- 
mine par #, son résultat est une chaîne de caractères ; 
dans le cas contraire, ce résultat est un nombre. 


- LEN(X#) : fournit la longueur (nombre de caractères) 
de la chaîne : 


- LEFT#(X8,N) : fournit les N caractères les plus à 


gauche, extraits de la chaîne X$ : 


- RICHTS(X#,N) : fournit les N caractères les plus à 
droite, extraits de la chaîne X9. Si N>LEN(X#), on 


obtient toute la chaîne (valable aussi pour LEFTS#) ; 


- MID$ : extrait des caractères au milieu d'une chaîne :; 
elle peut avoir deux ou trois arguments ; 





- MID$S((X$,K) : fournit les caractères extraits de la 
chaîne X9 à partir de la position K. Si K>LEN(X8), on 
obtient la chaîne vide : 


- MID#(X$#,K,N) : fournit la sous-chaîne de N caractères 
extraits de X$ à partir du K ième. Si K>LEN(X8), on 
obtient la chaîne vide ; si N spécifie plus de carac- 


tères qu'il n'en reste dans X9, on obtient tous les 
caractères de X# à partir du K ième. 


Exercice 5.6 


Remplacer le 5ème caractère de la chaîne X$ par la 
lettre A. 


Exercice 5.7 


Vérifier st la chaîne A# contient la sous-chaîne B#. 
Renvoyer dans la variable K, ÿ sit Af ne la contient pas, 
et st elle la contient, la première position dans A# où 
on trouve B$ 


Par exemple : si B$ÿ='"BRA", dans ABRACADABRA, on trouve 
Bÿ en 2 et en 9, et on doit obtenir K=2. Avec BONJOUR, 
on doit obtenir K=ÿ. 


84 


LA DECOUVERTE DE L'ORIC 


Fonctions de conversion : Les autres fonctions chaînes 
de caractères effectuent des conversions entre les nom- 
bres et leur représentation sous forme de chaînes de 
caractères ou de code ASCII (le code ASCII est le mode 
de représentation interne choisi par l'ORIC et la plu- 
part des micro-ordinateurs : chaque caractère est repré- 
senté par un motif binaire choisi, occupant un octet). 


Il y a quatre fonctions de ce type : 


- ASC(X#) : fournit la valeur en décimal de l'octet qui 
représente en ASCII le premier caractère de X9. Exem- 
ple : ?ASC('"A'") donne 65. 


- CHR$(K) : fournit une chaîne de un caractère : le ca- 
ractere dont K est le code ASCII. Exemple : ?CHR#(65) 
fait imprimer un A. 


- STR#(A) : fournit la chaîne de caractères qui est la 
représentation en décimal du nombre A. Si A=3.5, 
STR$(A) est la chaîne : signe (1), chiffre 3, point, 
chiffre 5. ?A et ?STR$(A) produisent la même impres- 
sion à ceci près que ?À est suivi d'un mouvement 


de curseur à droite et non ?STR$(A). Observez la 
différence entre : 
?"AA";A; "AAA" et  ?"AA";STRS(A);"AAA" 
Il y a néanmoins une différence importante : STR$#(A) est 


une chaîne de caractères justiciable des opérations 
LEFTS... 


- VAL(X$#) : fournit la valeur du nombre dont X3 est la 
Lennon cree . "4 : D û 
représentation décimale. Les seuls caractères permis 
dans X$# sont les chiffres, le point, l'espace et + 
ou -. Si le premier caractère non blanc de Xg n'est 
pas l'un des caractères permis, on obtient ÿ. 


Exercice 5.8 


A est entier positif. Trouvez son nombre de chiffres. 
Même question st À est entier quelconque. 


Exercice 5.9 


Imprimez B en supprimant 38 décimales. 


(1) Pour un nombre négatif, on a le signe -. Pour un 
nombre positif(c'est un défaut du Basic de l'ORIC), on 
a le caractère de code ASCII 2. Il ne s'imprime pas. 


85 


LA DECOUVERTE DE L'ORIC 


RECAPITULATION 


Nous sommes maintenant arrivés à un état perfectionné 
de notre programme de jeu. 


Au passage, nous avons découvert les principales pos- 
sibilités de Basic. 


Les instructions décrites jusqu'ici sont en général 
valables pour tous les ordinateurs. 


Nous allons voir maintenant des propriétés particu- 
lières de l'ORIC qui, pour la plupart, ne se retrouvent 
pas sur les autres P.S.I., notamment les possibilités 
graphiques et sonores. 


Mais, auparavant, nous voyons deux exercices essen- 
tiels. 


Exercice 5.10 


Calculez le score moyen de chaque joueur SM(J). Impri- 
mez le nom et le score moyen du joueur qui a le score 
maximum. En cas d'ex-aequo, on prend le premier trouvé. 


11 est particulièrement nécessaire ici de raisonner sur 
l'ordinogramme pour étudier le problème du maximum. Ce 
problème très classique se pose dans d'innombrables ap- 
plications. 


Exercice 5.11 


Imprimez le classement des joueurs, et non pas seule- 
ment le premier. 


Rappel : Des solutions aux exercices sont proposées en 
annexe. 


86 


LA DECOUVERTE DE L'ORIC 


CHAPITRE VI 


COURBES, GRAPHIQUES 
HAUTE RESOLUTION 


L'instruction la plus simple permettant de faire des 
dessins sur l'écran, nous la connaissons déjà. C'est 
tout simplement l'instruction PRINT. 


PRINT ‘chaîne de caractères" fait imprimer une chaîne 
de caractères sur l'écran. Cela permet d'imprimer un 
texte, comme nous l'avons déjà vu. Nous allons voir 
maintenant comment cela nous permet aussi de tracer sur 
l'écran la courbe représentative d'une fonction, pro- 
gramme qui a des applications importantes. 


COURBE REPRESENTATIVE D'UNE FONCTION - 
INSTRUCTION DEF FN 


Le programme n'est, en fait, pas très compliqué. Nous 
allons tracer la courbe de la fonction exponentielle 
y = exp(x), (eX) pour x allant de ÿ à 1. La courbe sera 
tracée point par point. Temporairement, l'axe des x sera 
vertical, l'axe des y sera horizontal. Disposant de 25 
lignes sur l'écran, on pourra représenter 24 points. 


Sur la ligne i sera matérialisé le point correspondant 


à x *2T: L'axe des abcisses est ici vertical, orienté 
de gauche à droite. y peut, lui, varier de 1 à 38. Sur 


une ligne donnée, une étoile sera imprimée dans la co- 
lonne dont le numéro est proportionnel à la valeur de y 
pour le x correspondant à la ligne. 


87 


LA DECOUVERTE DE L'ORIC 


Il faut donc appliquer un facteur d'échelle à la 
fonction, pour qu'elle varie entre L1 et 38 afin de cou- 
vrir tout l'écran. 


Pour la fonction exp, on emploiera 


37 .(exp(x)-1 


PR 


La formule générale pour une fonction f(x) dont le 
maximum et Le minimum dans l'intervalle de variation 
étudié sont respectivement max et min serait 


Pet à 37 (f(x)-min) 


max -— min 


Pour imprimer la courbe, il suffit donc de réaliser 
une boucle FOR X = début TO fin STEP intervalle, et 
pour chaque point une étoile dans la colonne INT(y). 


Basic dispose de deux fonctions simples pour cela 


PRINT TAB(N); positionne à la colonne N 
PRINT SPC(N); fait imprimer N espaces donc posti- 
tionne en N+1 


Le programme à réaliser en découle directement 
PROGRAMME C1 
S4 FÜR #eû TO 1 STEF 1-24 
SA Me L+TMTE SP EC ERP Ke DC EP À ed D 


+5 PRINT SPCCHa x" 
2Q HE#XT 


Bien entendu, un programme véritablement opérationnel 
devrait offrir une meilleure présentation : titre, des- 
sin des axes, coordonnées, etc. 


Vous avez toutes les connaissances utiles pour le 
faire, et nous vous suggérons de vous y exercer. 


Exercice 6.1 


Tracez deux courbes sur le même graphique, par exemple 
sin(x) et cos(x) pour x de 0 à 28PI. 


Indication : ?CHR#(11) fait remonter l'impression à la 
ligne précédente. 


Nous traitons l'exercice dans le texte vu les diffi- 
cultés qu'il pose et les solutions apportées. 


88 


LA DECOUVERTE DE L'ORIC 


Compte-tenu de l'indication donnée, une solution sim- 
ple est 


E# 6-1A 


14 CLS 

24 FOR #e=@ TO ZXPI STEF S#PI/ZE 
3 His 1+INTE SEC SIN EH 41 IE 0 

35 He=1+INTE EXC COS K 41 360 

4û PRINT SPCCHI SU" 

45 PRINT CHRSE 11 3 SPC HE an 
5 MEXT # 


La 2ème courbe s'inscrit avec des +. On a réduit l'in- 
tervalle d'écriture à 23 lignes (d'où le 22 à l'instruc- 
tion 29) et l'intervalle de variation à 37 (d'où le 36 
en 39 et 35) pour que les courbes tiennent bien dans 
l'écran. 


Mais il y a un défaut : les SPC(N2) de la 2ème courbe 
effacent la première courbe là où yl<y2. IL faudrait 
tester pour imprimer le plus grand d'abord, ce qui com- 
plique le programme. 


En fait, au lieu d'espaces il faudrait des curseurs à 
droite. De même que PRINT CHR#(11) équivaut à un cur- 
seur en haut, on a les codes suivants 


CHRS(...) Mouvement 


curseur à gauche 
curseur à droite 
curseur bas 
curseur haut 


vidage écran 

retour chariot 

retour en haut et à gauche de l'écran 
(sans effacement) 


espace 





Nous allons donc nous constituer une chaîne de cur- 
seurs à droite : Dÿ="":FOR I=1 TO 4@:D$=D8+CHR$(9):NEXT 
et pour faire N curseurs à droite, il suffira de pren- 
dre LEFTS(DS,N). 


D'où la seconde version 


# 6-16 


14 CLS: H$eCHRSE 11 1: Det" 
15 FOR Ie TO 4: DbeD$+CHRSCS I: HEET 
24 FOR x=n TO ZXPI STEF SXFI-£E 


89 


LA DECOUVERTE DE L'ORIC 


SA Hisi+IHTE GSEHC ESTIMER] dE 
35 MÉSL+TINTE SGH COS KT 0. 
+0 PRINT LEFTS#cD%, M1 43 "x4" 
45 FRTIHT HS$iLEFTSE DS, ME an 
HA HEM#T à 








INSTRUCTION DEF FN 


11 peut arriver de devoir tracer la courbe d'une fonc- 
tion qui n'est pas exactement une des fonctions de la 
bibliothèque, mais une combinaison de plusieurs d'entre 
elles. 


Cette combinaison peut intervenir plusieurs fois dans 
le programme. Il est alors pénible de la réécrire à 
chaque fois. 


Il existe une instruction qui permet de résoudre ce 
problème : c'est une instruction qui permet à l'utili- 
sateur de définir ses propres fonctions, qui vont alors 
se rajouter aux fonctions de bibliothèque. 


Exemples 


19 DEF FNHARM(X)=(A*X+B)/(C*X+D) 

29 DEF FNA(X)=2*SIN(X)+COS(2%*xX) 

39 DEF FNF(T)=EXP(-Tt2/2) 

49 DEF FNG(X)=1 + 36*(FNF(X)-MIN)/(MAX-MIN) 


Le nom de la fonction définie suit FN ; il obéit aux 
règles habituelles applicables aux noms de variables. 


Un appel à la fonction FNHARM définie en 1ÿ pourrait 
être 199 Z= l+FNHARM(3.5) 


L'expression donnée dans la définition est alors cal- 
culée, en remplaçant l'argument formel par la valeur 
(ici 3.5) fournie lors de l'appel. Pour les autres va- 
riables qui interviennent (ici À, B, C et D), ce sont 
leurs valeurs au moment de l'appel qui sont prises en 
compte. 

L'argument peut être fourni lui-même sous forme d'une 
expression quelconque à calculer 


199 PRINT FNA(U*A + EXP(B)/C) 
Les exemples 39 et 49 ci-dessus montrent qu'il est 


possible d'utiliser, dans la définition d'une fonction, 
une fonction déjà définie. 


90 


LA DECOUVERTE DE L'ORIC 


Utilisant cette nouvelle possibilité, voici le pro- 
gramme C-1B qui trace la courbe de la fonction de Gauss 
entre À et B 


FROGRANME C-1E 





DEF FHGE 1e 148646 FMFE MI He MAS -MIT M 


4G FOR #efA TO E STEP CB-AUEE 

SG IF FHFE 4 SM THEM MASSFMEE #4 02 
GA IF FHFEKOAEMI THEH MIHSFMEC 4 0 
FA HEMAT 

89 FÜR #eA TO BE STEF €CB-ASEE 

GE He IHTE FHGE 1 0 

184 PRINT SPCEM OUEN HERT 

114 GOTO 116 


La dernière ligne évite l'impression de Ready. 


L'avantage du programme C-1B sur la version précédente 
est qu'il est général : les bornes sont fournies par 
INPUT, et pour changer de fonction à tracer, il suffit 
de retaper l'instruction 1ÿ. 


De 39 à 79 s'effectuent les calculs du maximum et du 
minimum de la fonction, de la même manière qu'à l'exer- 
cice 5.10. 


En 69 nous avons écrit MI au lieu de MIN : on sait que 
cela référence la même variable. Si l'on avait écrit 
MIN, Basic aurait lu IF FNF(X)<M INT HEN... et aurait 
trouvé le mot-clé INT en position erronée. Voilà le 
genre de petite surprise que l'on peut avoir ! 


Nous avons rencontré dans les programmes de la série 
B qui précèdent, une bonne occasion d'utiliser un DEF 
FN : c'est pour imprimer un résultat en ne conservant 
que deux décimales : la même expression revient plusieurs 
fois. 


Par exemple, dans B-8, on aurait pu écrire 
3 DEF FNZ(X)=-INT(X*199@)/199 
Les lignes 6ÿ et 99 devenant respectivement 


69 PRINT'ERREUR'":;FNZ(E);"#":GOTO 3ÿ 
99 PRINT'GAGNE EN'":;FNZ(SC(J));"SECONDES". 


De même, tous les calculs de temps seraient simplifiés 
par 
5 DEF FNTI(X)=65535-DEEK(63@) 


91 


LA DECOUVERTE DE L'ORIC 


Exercice 6.2 


Reprenez le programme de l'exercice 85.4. En principe, 
vous l'avez sauvé sur cassette. Vous avez une popula- 
tion répartie en 10 classes. Tracez l'histogramme cor- 
respondant. 


Un histogramme est un diagramme formé d'autant de 
bâtons que de classes, chaque bâton ayant une longueur 
proportionnelle à l'effectif de la classe correspondante. 
A chaque ligne, ce n'est pas N espaces qu'il faut im- 
primer, mais N étoiles. 


LES TROIS MODES BASSE RESOLUTION 


L'ORIC dispose d'autres instructions pour dessiner 
des courbes. Ces instructions se répartissent entre les 
quatre modes d'affichage que possède l'ORIC : texte, 
basse résolution ÿ, basse résolution 1 et haute résolu- 
tion. On passe d'un mode à l'autre à l'aide des instruc- 
tions : 


TEXT qui fait passer en mode texte: 

LORES ÿ qui fait passer en mode basse résolution, 
caractères standards: 

LORES 1 qui fait passer en mode basse résolution, 
caractères auxiliaires; 

HIRES qui fait passer en mode haute résolution 
étudié à la fin de ce chapitre. 


Les trois modes basse résolution sont très proches et 
ils sont commandés par les mêmes instructions PRINT et 
PLOT, tandis que le mode haute résolution a tout un jeu 
d'instructions à part. 


Les deux modes LORES ne différent que par une chose : 
le choix du jeu de caractères utilisé. En effet, tout 
ordinateur doit, pour que son affichage fonctionne, pos- 
séder en mémoire les dessins de tous les caractères. 

Ces jeux de caractères sont normalement en ROM, mais 
l'ORIC les recopie en RAM à la mise sous tension. L'in- 
térêt est que l'on peut modifier la forme des caractères: 
nous l'exploiterons au chapitre suivant. Une particula- 
rité de l'ORIC est qu'il dispose de deux jeux de carac- 
tères : les caractères standards (lettres majuscules et 
minuscules, chiffres etc...) et les caractères auxi- 
liaires. Les caractères auxiliaires normaux ne sont pas 
très intéressants (caractères Télétel anglais) mais on 


92 


LA DECOUVERTE DE L'ORIC 


peut les modifier. Ils sont illustrés par la photo ci- 
dessous. 





» 


A la mise sous tension, on est en mode TEXT. Sachant 
que l'on peut, à l'aide des attributs afficher les ca- 
ractères de l'un et l'autre jeu quelque soit le mode, 
nous utiliserons exclusivement le mode TEXT dans ce 
livre. Les différences entre le mode TEXT et les modes 
LORES concernent la gestion des attributs (cf. la sec- 
tion consacrée aux attributs) et la gestion des lignes 
et colonnes. 


Rappelons que, physiquement, l'affichage de l'ORIC 
fait 28 lignes sur 40 colonnes. Nous numérotons les li- 
gnes de haut en bas Z, ÿ@, 1, ... 26. La ligne Z est ré- 
servée aux informations d'état : c'est là que s'affiche 
le "searching" du magnéto, le "CAPS" lorsqu'on s'est 
fixé en mode capitales par 'Ctrl' T etc... Nous numéro- 
tons les colonnes de gauche à droite Z, @, 1, 2,... 38. 
En mode LORES, la colonne Z est inaccessible (elle con- 
tient l'attribut de couleur du fond). Les colonnes ÿ à 
38 sont accessibles. En mode TEXT, la colonne Z est, 
comme en modes: LORES, réservée à l'attribut de couleur 
du fond : mais la colonne ÿ est, elle aussi, réservée 
(à l'attribut de couleur des traits). Ceci explique 
qu'on ne dispose que de 38 colonnes par ligne. 


PLOT 


L'instruction PRINT nous a permis de dessiner sur 
l'écran mais elle a certains inconvénients : on a vu les 
difficultés qu'on a eues pour tracer les courbes sur le 
même graphique. En fait, ce qui est difficile c'est de 
se positionner à un emplacement déterminé de l'écran. 

On le peut à coups de CHR#(39) et de mouvements de 


93 


LA DECOUVERTE DE L'ORIC 


curseur (voir tableau des CHR$ correspondants dans 
l'Exercice 6.1), mais l'ORIC a une meilleure instruc- 
tion pour cela, PLOT. 


PLOT a deux formes 
PLOT X,Y,K et PLOT X,Y,K3# 


où X et Y sont les coordonnées où se fera l'impression 
0 38% (ou 1<X<38, O<Y<26 selon le schéma 
ci-contre) et K est un nombre, 
code du caractère qui sera affiché : 
si O<K<31, il s'agit d'un attribut 
qui va influer sur les impressions 
futures ; si 32<K<127, un carac- 


26 s 2 J NE 
tère sera réellement imprimé. 


Y 
Dans la 2ème forme, K#ÿ est une 
chaîne de caractères qui sera imprimée à partir de la 
position définie par X,Y. : 
Exemple : Vérifiez que PLOT 15,15,65 et PLOT 15,15,'"A" 
produisent le même résultat. 


Le tableau suivant résume les codes caractères 


Code $ Code Code ÿ 
53 








32 espace 5 75 K 
33 ! 54 6 76 L 
34 ù 55 7 77 M 
35 # 56 8 78 N 
36 $ 57 9 79 0 
37 % 58 : 80 P 
38 & 59 ; 81 Q 
39 BOSCH 60 82 R 
40 ( 61 = 83 S 
41 ) 62 > 84 T 
42 * 63 ? 85 U 
43 + 64 @ 86 V 
44 : 65 À 87 W 

(virgule) 66 B 88 x 
45 _ 67 € 89 Y 
46 . 68 D 90 Z 
47 / 69 E 91 [ 
48 0 70 F 92 \ 
49 1 TL G 93 ] 
50 2 72 H 94 t 
51 3 73 I 95 £ 
52 4 74 J 96 © 


94 


LA DECOUVERTE DE L'ORIC 


Code Code Code 


119 















ES ———nu<xez 








œ] 
Hi 
(rl 







FU.+k TQ HO ADM 
<£+tTuUKHAQATOS3rH 


Les codes 34, 96 et 126 ne peuvent s'obtenir par "ca- 
ractère" : il est donc obligatoire de les imprimer par 
CHRS (code). 


Les codes ÿ à 31 qui définissent les attributs seront 
étudiés plus tard. 


Enfin, si l'on écrit 128+code, on obtient le même ca- 
ractère mais en contraste inversé (échange des couleurs 
de fond et de trait) avec PLOT ou POKE, le même carac- 
tère sans inversion avec PRINT CHR#(...). 


Nous sommes maintenant en mesure de tracer une courbe 
avec PLOT : nous reprenons tout simplement notre tracé 
de l'exponentielle (C-1A). Il faut faire une transfor- 
mation des coordonnées car maintenant X est en horizon- 
tal et commence à la valeur 1. Nous appelons XX et YY 
les coordonnées "courbe" et X et Y les coordonnées 
écran 

X=1+37*XX Y=27-YY 


d'où 
PROGRAMME Cie 


14 CLS 

24 FOR Kkeñ TO À STEP 1-38 
BA mel+INTÉSF 
4 ess IMTÉZEKC EP ee el ec EURE 1 1 42 
sa FLOT Ha vx" 

S@ HE*# 






Le fait de pouvoir tracer un point en fonction de ses 
coordonnées est très utile si la courbe est définie par 
des équations paramétriques. 


95 


LA DECOUVERTE DE L'ORIC 


Exercice 6.3 


Tracer un cercle sur l'écran. Rappel : si XC,YC sont 
les coordonnées du centre et R le rayon, le cercle a 
pour équations paramétriques 


as cos T 


Y=YC+R ein r  VSTESPT 


LA FONCTION SCRN 


La fonction SCRN(X,Y) renvoie le code du caractère 
inscrit à la position X,Y. Elle renvoie 32 (espace) 
s'il n'y a rien. 


Exemple : Après PLOT 15,15,"A"  , ?SCRN(15,15) fait 
imprimer 65. 


L'utilité de cette fonction est grande dans les pro- 
grammes de jeu : vous pouvez par exemple déceler facile- 
ment si un mobile rencontre un obstacle. 


ENTREES-SORTIES PAR PEEK ET POKE 
DANS LA MEMOIRE D'ECRAN 


Une autre manière d'écrire à une position déterminée 
de l'écran est d'écrire directement le code voulu dans 
la mémoire convenable. En effet, il y a une zone mémoire 
assignée à l'écran, chaque position sur l'écran étant 
associée à une case mémoire qui conserve le code du ca- 
ractère affiché à cette position. 


Les adresses obéissent au schéma suivant 


X 





96 


LA DECOUVERTE DE L'ORIC 


Ainsi l'adresse correspondant à la case X,Y est 48999 
+ 49*(Y+1)+X+1 
POKE 4899ÿ+49x*x(Y+1)+X+1,Z est équivalent à PLOT X,Y,Z 
et, donc, n'a pas d'intérêt dans un cas habituel. Le 
seul intérêt du POKE est qu'il peut accéder à la ligne 
et à la colonne réservées. 

De la même façon PEEK(48ÿÿÿ+4ÿ*x(Y+1)+X+1) est équiva- 


» 


lent à SCRN(X,Y). 


LES ATTRIBUTS -— LES COULEURS 


Lorsque le code est »>32, PRINT CHR#(code) et PLOT..., 
code sont équivalents. Lorsque le code est inférieur, 
ce n'est pas le cas. Avec PRINT, on obtient une action 
spéciale de mise en page sur l'écran analogue à celle 
qu'on obtiendrait en mode direct avec la touche 'Ctrl'. 
Les actions de la touche 'Ctrl' ont été indiquées dans 
la section sur le clavier au chapitre 3. Le tableau des 
principaux codes de mise en page écran a été donné dans 
la solution de l'Exercice 6.1 au début de ce chapitre. 
On remarque que 'Ctrl' lettre équivaut à ?CHRg#(code) si 
code=numéro de la lettre dans l'alphabet. 


Ainsi ?CHR#(12)+"AAAA" vide l'écran et imprime AAAA. 
Qu'en est-il avec PLOT ? Essayez PLOT 15,15,CHR#(12)+ 
"AAAA'". 

Eh bien on imprime AAAA au milieu de l'écran, mais en 
clignotant. Le AAAA a été imprimé ligne 15 mais à partir 
de la colonne 16. Un ?SCRN(15,15) montre que la case 15, 
15 a été remplie avec le code 12, qui est l'attribut du 
clignotement. 





Peut-on avoir les attributs avec PRINT ? Oui, mais il 
faut, comme on l'a vu en mode direct au clavier, que le 
code soit précédé d'un caractère 'Escape' (CHR#(27)). 
Essayez : ?" "4+CHR$(27)+"LAAAA" 

Vous obtenez le AAAA clignotant. L'espace en tête em- 
pêche que l'attribut vienne en tête de ligne : on verra 
pourquoi un peu plus loin. Le L n'est pas imprimé 

c'est lui qui crée l'attribut ; on voit que ce n' est pas 
le code PLOT qu'il faut mettre mais la lettre dont le 
numéro dans l'alphabet est le code voulu. On pouvait 
aussi mettre : 

CHR (code + 64) : essayez 7?" "4+CHRS(27)+CHR#(76)+"AAAA". 


Quelle est l'action des attributs ? Les attributs com- 
mandent 
- la couleur du fond, la couleur des traits des carac- 


97 


LA DECOUVERTE DE L'ORIC 


tères, le fait d'appartenir au jeu de caractères stan- 
dard ou auxiliaire, le fait d'être clignotant ou non, 

le fait d'être en simple ou double hauteur. Les valeurs 
sont résumées dans le tableau ci-dessous. Les caractères 
avec 'Esc' ont été donnés au chapitre III. 


Code des attributs 


caractères double hauteur, 
caractères rouges auxiliaires, clignotant 
caractères verts noir (16+0) 
caractères jaunes rouge (16+1) 
caractères bleus vert (16+2) 
caractères pourpres jaune (16+3) 
caractères turquoises bleu (16+4) 
caractères blancs pourpre (16+5) 
simple hauteur standard turquoise (16+6) 
simple hauteur, blanc (16+7) 
auxiliaires texte 60 Hz 

double hauteur ,standard texte 60 Hz 

double hauteur, texte 50 Hz 
auxiliaires texte 50 Hz 

simple hauteur ,standard i 60 ,Hz 
clignotant i 60 Hz 
simple hauteur, i 

auxiliaires, clignotant 

double hauteur ,standard 

clignotant 





La double hauteur n'a pas grand intérêt. Les codes de 
24 à 31 non plus. Notez que les valeurs marquées 60 Hz 
font perdre la synchronisation sur les téléviseurs euro- 
péens : il ne vous reste plus qu'à faire RESET (petit 
bouton sur l'ORIC, ou frappe de CALL 62512) ; cela ne 
détruit pas le programme en mémoire. 


Exercice 6.4 
Imprimez BONJOUR au milieu de l'écran, clignotant en 
bleu sur fond pourpre. 


L'exercice précédent pose le problème du domaine de 
validité des attributs. La règle est simple : un attri- 
but est valable à partir de sa position jusqu'à la fin 


98 


LA DECOUVERTE DE L'ORIC 


de la ligne ou jusqu'à ce qu'un nouvel attribut vienne 
le contredire sur la ligne. 


Plusieurs attributs peuvent être en vigueur en une po- 
sition. Si un nouvel attribut vient contredire l'un 
d'eux, les autres restent valables. Ainsi, dans l'exer- 
cice 6.4, on a 


col. 14 15 16 17 23 24 
clign. car. fond BONJOUR fond 
bleus pourpre blanc 


En colonne 25, par exemple, on est en fond blanc, mais 
on est resté en caractères bleus clignotants. Vous pou- 
vez le vérifier en venant à la fin de la ligne par mou- 
vements de curseur et en tapant quelques caractères. 


Exercice 6.5 
Imprimez comme à l'exercice 3.3 : 
M MADAME BONJOUR MONSIEUR 


fixe!'noir fixe! bleu 

sur blanc sur blanc 
clignotant clignotant 
blanc sur noir jaune sur bleu 


Il y a deux manières d'obtenir du contaste inversé 
changer les attributs, ou ajouter 128 au code caractère. 


Question : Peut-on avoir, en deux positions consécutives 
de l'écran, des caractères de couleurs différentes ? 


- NON, car l'attribut de changement de couleur occupe 
une position. 


Exemple : on ne peut avoir AE (tant pis pour Rimbaud..) 


code ll : 
noir ‘rouge 


: i 
on aura au mieux À CJE 
1: t 
noir rouge 
Le seul cas où l'on peut avoir des couleurs différentes 
consécutives sur une ligne, c'est de faire des fonds 


différents, sans caractères. Il suffit alors de mettre 
les attributs. Essayez 


PLOT 19,19,CHRS#(16)+CHRS#(17)+CHR3 (18 )+CHR3 (19 )+CHR9(2@)+ 
CHRS(21)+CHR3(22)+CHRS (23). 


99 


LA DECOUVERTE DE L'ORIC 


Exercice 6.6 


Dessinez le drapeau français au milieu de l'écran. 


Attributs globaux 


Pourquoi y a-t-il deux colonnes réservées en début de 
chaque ligne ? C'est parce qu'elles contiennent les at- 
tributs de couleur de fond et de couleur des caractères 
standard (à la mise sous tension on a fond blanc, carac- 
tères noirs en mode TEXT ; c'est l'inverse dans les 
modes LORES). 


11 est facile d'en changer. Il suffit, pour changer 
la couleur du fond de l'écran de faire POKE toutes les 
colonnes z, attribut de fond voulu. Essayez : 


FOR 1-48ÿ@@ TO 4912% STEP 4@:POKE I,18:NEXT 


vous obtiendrez un fond vert. Ceci montre que les attri- 
buts fonctionnent aussi bien avec POKE qu'avec PLOT. 


Eh bien le Basic de l'ORIC vous permet d'éviter une 
telle boucle. Il suffit de faire PAPER n pour définir la 
couleur de l'écran selon la correspondance 


or pets pe) Rs ere 


[one fre [ru 


PAPER n équivaut à la boucle avec l'attribut n+16. 





De même INK n définit la couleur des caractères avec 
la même correspondance. Cette fois, la valeur de n est 
égale à l'attribut correspondant. 


Nous en avons terminé avec les modes basse résolution. 
La question des attributs est délicate mais c'est elle 
qui permet les couleurs ou des effets comme le clignote- 
ment. 


Exercice 6.7 


Faire un drapeau français couvrant tout l'écran. 


LE PROBLEME DE LA RESOLUTION 


Tous les graphiques que nous avons obtenus jusqu'à 
maintenant sont assez grossiers puisqu'ils sont définis 


100 


LA DECOUVERTE DE L'ORIC 


dans les mailles d'impression de l'écran : la résolution 
est de 28 sur 49 au maximum. 


En fait, l'ORIC permet d'accéder aux points élémen- 
taires de l'affichage, ce qui multiplie la résolution 
par 6 en horizontale et par 8 en verticale. Comme ce 
mode appelé HIRES (haute résolution) laisse en fait les 
trois dernières lignes de l'affichage en mode TEXT, ce 
qui vous permet de taper des commandes, la résolution 
finale est de 299 sur 249 suivant le schéma : 


9 56e LT 239 x 





Le 


Œ Je. 


199 


Y 


On passe au mode haute résolution par la commande 
HIRES. On repasse en mode texte par TEXT. Les données de 
l'écran sont perdues lorsqu'on envoie une telle commande. 


La fenêtre en mode TEXT est le plus souvent en noir 
sur blanc (elle garde les couleurs qu'on avait en mode 
TEXT). Les commandes PAPER et INK s'appliquent à la fe- 
nêtre en haute résolution pour définir la couleur du 
fond et du tracé. Lorsqu'elles sont utilisées, donc 
lorsqu'on ne fait pas du blanc sur noir, les colonnes 
élémentaires @ à 11 deviennent inaccessibles (pour con- 
tenir les attributs voulus). 


À part PAPER et INK, le mode haute résolution a un jeu 
de commandes spécial que nous voyons maintenant. Dans 
la suite X et Y dénotent des coordonnées exprimées en 
lignes et colonnes élémentaires : 


ÿ ou 12 <X<239 : W<Y<199 


101 


LA DECOUVERTE DE L'ORIC 


COMMANDES HAUTE RESOLUTION 


CURSET X,Y,K 


CURMOV DX,DY,K 


DRAW DX,DY,K 


PATTERN M 


CHAR C;,S,K 


CIRCLE R,K 


positionne le curseur en X,Y où on af- 
fiche un point de la couleur du tracé si 
K=1, de la couleur du fond (donc invisi- 
ble) si K=-ÿ. Dans cette commande et les 
suivantes, les coordonnées n'ont pas be- 
soin d'être entières : le système prend 
la partie entière. 


: positionne en X+DX, Y+DY si X,Y est 
l'ancienne position : donc CURMOV est 
analogue à CURSET si ce n'est que CURSET 
offre un positionnement absolu tandis 
que CURMOV est relatif aux anciennes co- 
ordonnées. K a le même rôle que dans 
CURSET. 


: trace un trait droit de X,Y à X+DX,Y+ 
DY. Si K=1 le tracé sera visible, si K=ÿ 
il sera invisible (car de la couleur du 
fond). Le tracé est un trait continu en 
principe, selon la valeur donnée par 
l'instruction PATTERN. 


: définit le motif des traits qui seront 

tracés. M est un entier de ÿ à 255 c'est- 

à dire un octet dont les 1 définissent 

les pleins, et les ÿ les vides. 

Exemple : 255=11111111, trait continu 
15=ÿ999@1111, pointillé régulier 


142=-19#D111%, .-.-.-. 


: affiche le caractère de code ASCII C à 
une position telle que les coordonnées 

de son coin supérieur gauche soient 
celles du curseur. On utilise le jeu 
standard si S=-ÿ, le jeu auxiliaire si S=1. 
Le caractère sera visible si K=1. 


: dessine un cercle de rayon R dont le 
centre est à la position actuelle du cur- 
seur. Il est visible si K=1. 


La commande FILL concerne les attributs : elle sera 
vue au chapitre suivant. Il reste à voir une fonction 
analogue à SCRN : 


POINT (X,Y) 


: renvoie -1 si le point de coordonnées 
X,Y est allumé, ÿ sinon. 


102 


LA DECOUVERTE DE L'ORIC 


Elle peut être utilisée même quand on 
est repassé en mode TEXT après avoir fait 
un dessin en HIRES. 


Nous sommes maintenant en mesure de tracer une courbe 
en haute résolution. 


Nous allons tracer 4 alternances de sinusoïde. Nous 
adopterons l'équation : Y=1@ÿ+9YxSIN(8*PI*Xx/23%) d'où 
le programme 

PROGRAMME Ce 


14 HIRES 

Eù sed: VelAO:CURSET #1 

SG FÜR #kel T0 234 

4 SLR A+SOESTIHE GKPIKEEA ZA 
FQ DXekK=R :Dvav 

SQ DRAM Ci, Os 1 CURSET EE, 
FA me : asp 

SE HET 





Le CURSET en 6ÿ est nécessaire car DRAW ne met pas le 
curseur à jour. 


Nous sommes maintenant presque en mesure d'écrire un 
programme spectaculaire, le Télécran. Un petit exercice 
avant. 


Exercice 6.8 
Mettez un titre à la courbe du programme C-2. 


Exercice 6.9 


Transformez votre ORIC en Télécran. En fonction de la 
touche enfoncée, nous déplaçons le point de tracé. Si 
la touche 'Ctrl' n'est pas enfoncée, il y a simple dé- 
placement. Si elle est enfoncée, 11 y a tracé. L'adresse 
mémoire 58 contient à tout moment l'image de la touche 
actuellement enfoncée. Nous proposons les assignations 
suivantes 


aucune 
curseur- Re RS 
t ‘Return retour en 
- : nou, haut à gauche 


















103 


LA DECOUVERTE DE L'ORIC 


L'adresse mémoire 521 contient l'état des touches 
'Shift', 'Ctrl' et 'Funct' selon le tableau 


aucune 
Shift droit 





SAISIE AU VOL DE CARACTERES AU CLAVIER 


Revenons à notre programme de jeu "devinez un nombre". 


Maintenant que nous savons écrire en un endroit déter- 
miné de l'écran, grâce à PLOT, nous pouvons apporter 
une amélioration spectaculaire à notre programme de jeu 
du chapitre précédent. 


Quelle angoisse pour le joueur de voir les secondes 
s'égréner sur l'écran pendant qu'il cherche le nombre à 
deviner ! 


Pour mieux voir l'essentiel, nous partons d'une ver- 
sion simplifiée du programme B-5/B-8 


PROGRAMME E-SE 


14 DEF FHTIE Ge IMTEE ES SSS- CE 
19 CLS: Ce 1 HSSÆRMDOE 1 4: DOKE HE, a 
gA IF FHTICH EG GOTO FA 

8 PRINT "HE. PROPOS E “3 









35 HS<STREE FHTIL; BeRIGHTSE HS, LEE 6 1 te PLOT CHE A 
4% INPUT A 

MO Es lQRÆABSC A-LuSCIIF Ec1 GOT A 

GA PRINT "ERREUR M3 IHTÉE di "ke GOITO A 

FA PRIMNT'PERDUI" :GOTO 34 

&@ FRINT'GAGHE!" 

3 IHPUT'ON RECOMMENCE "Ag: IF Aga"0il" GOTO 14 


Les simplifications que nous avons apportées sont évi- 
dentes : nous avons supprimé toute gestion des diffé- 
rents joueurs, simplifié le traitement des erreurs, et 
ramené le temps limite à 1 minute. On exploite le DEF FN 
vu au début du chapitre. 


La fin du programme mérite examen : on demande au 
joueur s'il veut recommencer, et on analyse la chaîne 


104 


LA DECOUVERTE DE L'ORIC 


de caractères que forme sa réponse : c'est très utilisé 
dans tous les programmes dits "interactifs". 


Nous avons mis le libellé "NB. PROPOSE" (ligne 3@) 
dans une instruction PRINT distincte de INPUT. C'est en 
effet entre les deux que se placera l'impression de 
l'heure. On inscrit dans la partie droite de la première 
ligne de l'écran le nombre de secondes écoulées. Il faut 
un STR# pour transformer en chaîne de caractères. On 
élimine son caractère le plus à gauche car STR# intro- 
duit un caractère parasite. 


Essayons le programme ainsi obtenu. 


Il ne fonctionne pas comme nous le voulons : on ne 
voit pas se dérouler le temps pendant que le joueur hé- 
site à donner son nombre. 


Tout vient de l'instruction INPUT. Lorsqu'une instruc- 
tion INPUT s'exécute, le programme est bloqué jusqu'à 
l'appui sur la touche 'Return'. Pendant ce temps, rien 
ne peut être fait. 


Ce qu'il nous faudrait, c'est une instruction qui re- 
garde si l'on a tapé un caractère sur le clavier et qui 
redonne le contrôle à l'utilisateur dans tous les cas. 
On pourrait alors obéir à l'ordinogramme ci-après : 


Regarder au clavier 










Inscrire l'heure 







Caractère Return 












Traiter 
le nombre 


Le joindre 
au nombre 
à former 





Pas delcaractère 


105 


LA DECOUVERTE DE L'ORIC 


Eh bien l'ORIC a ce qu'il faut pour cela. On a déjà 
vu une solution dans l'exercice 6.9. Mais elle a un in- 
convénient : le PEEK(52ÿ#) n'est pas le code ASCII du 
caractère concerné ; c'est une valeur qui dépend de 
l'emplacement de la touche sur le clavier. On pourrait 
dresser un tableau complet de la correspondance PEEK 
(52@)-touches, mais cette solution n'est commode que si 
l'on s'attend à un choix très réduit de quelques touches, 
ce qui était le cas dans le Télécran. 


L'ORIC offre deux solutions purement Basic au problème. 


L'instruction GET 


GET A$ attend l'appui sur une touche et fournit le 
caractère tapé dans la chaîne AG. 


Ceci n'est pas encore vraiment la solution à notre 
problème puisque GET attend l'appui sur une touche. Mais 
GET est utile pour améliorer l'interactivité du pro- 
gramme en évitant d'attendre en plus le 'Return' 


La fonction KEYS$ 


A$=KEY$ fournit à tout moment dans Ag le caractère 
correspondant à la touche enfoncée. S'il n'y a aucune 
touche enfoncée, on obtient la chaîne vide dans Ag. 


Ceci fournit la solution cherchée puisque KEY$# rend 
immédiatement le contrôle au programme sans attendre 
qu'il y ait une touche enfoncée. 


En appliquant exactement l'ordinogramme précédent, on 
obtient 


PROGRAMME  B-5C 


19 DEF FHTIÉHOSINTE 6 6SSSS-DEEKL 630 3 1-60 
15 CLS:'C=1+93%#RHD6 103 :DOKE 634, 65535 

2A FRIHT "MNB.PFROPOSE 7 "à 

2s A$= un 

3Q@ IF FHTJS#HISER COTO FA 

33 B#=KE TS 

35 HY=STRÉC FNTIÉ #0 1: HBeRICGHTEE ES, LEME Kg ei PLOT 5.4, 
37 IF B#="" GOTO 34 

39 IF B$=CHR#« 1329 GOTO 45 

41 AS=<AS+BS6: PRINT E$i: GOT 34 

45 A=VALE AS 5: PRINT 

SA Es12AKkABSCA-CI-CIIF El GOTO SE 


106 


LA DECOUVERTE DE L'ORIC 


69 PRINT "ERREUR ":INTÉE "M": COTE ZW 
7@ PRINT"PERDU!" :GOTO Si 

88 PRINT'GAGHE !" ; 

9@ INPUT'OH RECOMMENCE ":AS:IF Age"OUl" GOTO 18 


Nous nous limiterons ici aux commentaires essentiels. 
Le changement d'ordre entre 2ÿ et 39 est nécessaire pour 
que l'on passe à tout moment sur ie test du temps, afin 
de bien assurer qu'on ne laisse qu'une minute. 

On remarque, en 2ÿ, que l'on imprime explicitement le 
point d'interrogation : GET et KEY$# ne le fournissent 
pas, au contraire d'INPUT. De même, avec GET et KEY3, 
on est obligé de contrôler la mise en page, d'où les 
espaces en 29 et 6ÿ, et l'on est obligé d'imprimer les 
caractères à mesure qu'on les trouve, d'où le PRINT en 
41. 

Les lignes 25, 33 et 41 construisent progressivement la 
chaîne A% à partir d'une valeur initiale "chaîne vide". 
A chaque fois qu'un caractère B$ est disponible, il est 
concaténé à la chaîne A$ déjà obtenue : A$ = AS+B$. 
Notez aussi, en 39, comment le caractère 'Return' est 
testé : on ne pouvait pas faire : 39 IF B#='Return', 
car le 'Return' termine impitoyablement la ligne. On 
aurait pu écrire également : 


39 IF ASC(B#)=13... 


Nous conseillons vivement d'adapter cette dernière 
version de B-5 à B-19 que nous avions obtenue au chapi- 
tre précédent : pratiquement, seuls les numéros d'ins- 
truction changent. 


Nous voyons, en somme, que l'instruction GET et la 
fonction KEYS$ "saisissent" les caractères un par un au 
clavier. Cela permet une meilleure interactivité entre 
l'utilisateur et la machine. Par exemple, à la fin de 
B-5C, on pourrait recommencer dès que l'utilisateur a 
tapé O de OUI, sortir dès qu'il tape N, au lieu d'atten- 
dre O U I 'Return'. Cela permet de réagir plus vite à 
la frappe de l'utilisateur : c'est nécessaire, en par- 
ticulier lorsque, dans un jeu de bataille de chars, par 
exemple, l'appui sur une touche simule un tir. 


Exercice 6.10 


Faites la modification nécessaire à la fin du pro- 
gramme B-5C. 


107 


LA DECOUVERTE DE L'ORIC 


Exercice 6.11 


Il est bien souvent utile d'insérer un point d'attente 
dans un programme : cela permet de fixer l'affichage 
pour que l'utilisateur en prenne connaissance. Très sou- 
vent, on décide que, pour continuer, il suffit que 
l'utilisateur appuie sur n'importe quelle touche. Im- 
plantez la séquence qui assure ce comportement. 


GRAB ET RELEASE 


Bien sûr, l'affichage en haute résolution consomme 
beaucoup de place mémoire. Il y a un moyen, lorsqu'on 
n'est pas en mode HIRES, de récupérer cette place mé- 
moire pour Basic. Comme elle fait environ 8K, c'est ap- 
préciable sur un ORIC 16K et cela peut être utile aussi 
avec un 64K. Il suffit d'écrire la commande GRAB. 


RELEASE est la commande inverse. Elle reprend à Basic 
la zone de mémoire de la haute résolution. Si l'on a 
fait GRAB pour faire tourner un programme et que i'on 
veut ensuite faire de la haute résolution, il faut faire 
RELEASE avant le HIRES. 


RECAPITULATION 


Ce chapitre nous a fait connaître une bonne partie 
des possibilités graphiques de Ll'ORIC. D'autres possibi- 
lités -plus délicates- seront décrites dans le chapitre 
suivant. 


Nous savons maintenant tracer une courbe en basse ou 
haute résolution et manier les couleurs. 


Nous avons vu en outre deux outils intéressants : DEF 
FN et la saisie de caractères au vol. 


108 


LA DECOUVERTE DE L'ORIC 


CHAPITRE VII 


PROGRAMMES GRAPHIQUES 
ELABORES 


LES GENERATEURS DE CARACTERES 


Il nous faut maintenant expliquer un peu plus profon- 
dément comment marche l'affichage de l'ORIC. Nous allons 
simplifier au maximum. 


L'écran haute résolution est formé d'une matrice de 
points (299 sur 24ÿ), chacun étant susceptible d'être 
allumé ou éteint. À la mise sous tension et en l'absence 
d'attributs, "allumé" = blanc, "éteint" = noir. Le télé- 
viseur ou, plutôt, le processeur graphique, balaie 
l'image ligne élémentaire par ligne élémentaire. Pour 
chaque point de l'image, au moment où il le balaie, il 
doit être capable de savoir s'il est allumé ou éteint. 
Le fait d'être allumé pouvant se coder sur un bit (1 = 
allumé, ÿ = éteint), ceci représente une information de 
299x24ÿ-4899ÿ bits. En fait, le long d'une ligne élemen- 
taire, les bits sont groupés 6 par 6 et chaque groupe 
entre dans un octet. IL y a donc 4ÿ octets pour chaque 
ligne d'où 8999 octets. 


Sur l'ORIC ces octets sont aux adresses 4ÿ96ÿ à 48959 
selon le schéma 





X 
1.e.0 49999 
OUT 
1.e.1l 41939 
l.e 
199 48959 
à 4 





LA DECOUVERTE DE L'ORIC 


Vous pouvez vérifier ces adresses en tapant 
HIRES :POKE 4@96ÿ,63:POKE 48959,63 


Bien sûr, 8999 octets c'est une taille mémoire impor- 
tante. On va voir que pour afficher des textes, la 
taille nécessaire peut être diminuée ce qui fait gagner 
en mémoire et aussi en vitesse d'affichage. 


Pour cela, on regroupe les points élémentaires en rec- 
tangles de 8 lignes élémentaires sur 6 colonnes élemen- 
taires, appelés les "mailles". Un caractère vient 
s'afficher sur l'écran dans une maille. Les mailles 
sont réparties en lignes et colonnes. Il faut bien dis- 
tinguer ces lignes et colonnes qu'on appellera ‘macros- 
copiques" des lignes et colonnes élémentaires. L'écran 
est formé de 28 lignes sur 4ÿ colonnes macroscopiques 
suivant un schéma donné au chapitre précédent. 


Maintenant, on fait la remarque que les caractères 
que l'on a à afficher dans une maille appartiennent à 
un jeu restreint : alors qu'il y a 2“ combinaisons pos- 
sibles (il y a 6x8-48 points dans chaque maille, chacun 
pouvant être allumé ou éteint), on n'affiche en fait 
que, au plus, 256 caractères possibles (y compris les 
contrastes inversés). On va alors coder l'information 
en deux fois : 


Dans une première mémoire (vive obligatoirement), de 
nombre d'octets égal au nombre de mailles sur l'écran 
(donc 1129 sur Ll'ORIC), on mettra le code du caractère 
qui doit figurer dans chaque maille. Si E est l'adresse 
d'origine de cette mémoire (48#ÿÿ), l'adresse correspon- 
dant à la maille de coordonnées X,Y est 48990+4ÿxv+x 
(la formule est légèrement différente de celle de la 
page 97 qui tenait compte des lignes et colonnes réser- 
vées)(voir schéma page 96). 


On a ensuite une seconde mémoire (qui peut être de la 
mémoire morte) qui va contenir la correspondance code- 
dessin. Cette mémoire s'appelle le générateur de carac- 
tères. Appelons G son origine (46ÿ89 ou 47194 sur 
l'ORIC). IL y a dans cette mémoire 8 octets pour chaque 
caractère. À l'adresse G+8*R+L se trouve un octet dont 
les 6 bits de droite sont l'image de la ligne élémen- 
taire L qu'il faut pour dessiner le caractère de code R. 
L est compris entre ÿ et 7. R est compris entre ÿ et 
127 car les motifs en contraste inversé sont déduits 


de leurs correspondants en contraste normal : le système 
utilise R AND 127 si R>128. En fait, seul R>32 donne un 
caractère ; en dessous, le code est considéré comme 
attribut. 


110 


LA DECOUVERTE DE L'ORIC 


Essayez le programme : 


19 G-4698@:R=65:REM CODE DE È‘'A' 
29 FOR L=ÿ TO 7 
39 PRINT PEEK(G+8%*R+L):NEXT 


Vous obtenez les impressions : 


8 = 99991909 soit L, LS ns 
29 = 99919190 . .. ©. . . 
34 = 99190919 .. . …. e.. 
34 = 99190919 e . . e . 
62 = ÿÿ111119 eee. 
34 = 09199919 .. . . ©. . 
34 = 99199014 e. . . . ©. 
34 = 99199014 .. . …. ©. . 
9 = 90009009 Hu le Are, à 


On voit comment cela fait dessiner un A. 


L'ORIC a deux générateurs de caractères d'origines 

G1=-46ÿ89, c'est le générateur de caractères standard 
et G2=-47194, c'est le générateur de caractères auxi- 
liaire. 


Le jeu auxiliaire s'obtient comme on l'a vu après 
l'attribut 9 ou partout, en mode LORES 1. Il est formé, 
en normal, de petits dessins (voir photo page 93) qui 
correspondent au TELETEL anglais et n'ont pas grand in- 
térêt pour nous. Mais on va changer cela. 


En effet, sur l'ORIC, les deux générateurs de carac- 
tères sont en mémoire vive (en fait, il en existe une 
copie en mémoire morte qui est copiée dans la zone ap- 
propriée de mémoire vive à la mise sous tension ou 
lorsqu'on fait RESET). Cela veut dire que tous les ca- 
ractères sont programmables, c'est-à-dire que leur forme 
est modifiable à volonté par des POKE dans les adresses 
voulues. 


Ceci a des applications prodigieuses : on peut créer 
le jeu de caractères que l'on veut en modifiant certains 
dessins de caractères ou en les modifiant tous éventuel- 
lement. Ceci permet par exemple les lettres grecques, 
certains signes mathématiques, les caractères accentués 
du français pour un mini-traitement de textes. Cela per- 
met de créer des caractères graphiques comme des in- 
sectes, des envahisseurs ou autres... 


Nous allons par exemple créer une balle, en remplace- 
ment du caractère '*', Pour cela nous dessinons notre 


111 


LA DECOUVERTE DE L'ORIC 


balle dans sa matrice 8x6, d'où les valeurs des lignes 
en binaire puis en décimal. 


£ +2 0099009 = 9 
ee... 911119 = 39 
eee 111111 = 63 
..e.ee.e 111111 = 63 
..ee.e.e 111111 = 63 
...e.e.e 111111 = 63 
eee. 911119 = 39 
SE 44 3 009909 = 9 


On met ensuite les données en DATA et il suffit du 
programme suivant 


Programme D-1A 


19 PRINT " x" 

29 PRINT " *k x" 

39 G=-4698ÿ:R=ASC("*x") 

49 FOR L=ÿ TO 7:READ X 

59 POKE G+8*R+L,X:NEXT 

199 DATA ÿ,39,63,63,63,63,39,9 


On voit que toutes les étoiles de l'écran se trans- 
forment en balles y compris celles du listing du pro- 
gramme. Il n'est donc peut-être pas très indiqué de 
transformer les caractères courants : les listings des 
programmes deviendraient illisibles, encore qu'on puisse 
toujours revenir à la normale en faisant RESET ou CALL 
62512. 


C'est pourquoi il est préférable de modifier plutôt 
le générateur de caractères auxiliaires (d'origine 
47194). On affiche les caractères auxiliaires en mettant 
des attributs 9 (retour aux caractères standard avec 
l'attribut 8) ou en se mettant en mode LORES 1. 


Exercice 7.1 


Obtenez la balle avec le jeu de caractères auxiliaires. 


Nous allons maintenant dessiner une petite maison, 
ayant l'aspect ci-contre. Il 


DÉS faut d'abord faire le "réper- 


toire" des caractères dont nous 
avons besoin. 

Nous proposons : 
WA (a)N 8) tc) Qi) EE) 
Op'on (H) D Q "2 


112 


LA DECOUVERTE DE L'ORIC 


‘où les données 


1,2,2,4,8,16,32 


d 
À : 32,16,16,8,4,2,2,1 
C : 63,9,0,9,9,9,0,9 

E 

G 

I 


9,9,0,0,9,0,9,63 
: 8 fois 32 8 fois 1 

: 63, 7 fois 32 : 63, 7 fois 1 
7 fois 32, 63 #: 7-EL018:.1.-63 


D'où le programme qui commence par l'impression de la 
maison en caractères ordinaires, d'abord. Ensuite on 
transforme le jeu de caractères et enfin on met les at- 
tributs 9. 


PROGRAMME D 


GTI OT 


14 PRIHT" COCO" 

eû FRIHT" A Es" 

38 PRINT" A E" 
4û FRIHT" HOÉCÉCLCCC 
5a PRIHT" FACE GGEE" 
6@ FRIHT" FE F GGEE" 
78 PRINT" FEF CCE" 
8& FRIHT" JOICJCOOCT" 


3Q G=d4r1f4 

LA FÜR Keëg TO F4 

11Q FOR Le a TO F 

128 REAC KX:FOKE CG+S#R+L 

134 HEAT L'HEXT KR 

148 FÜR Isû TO Z6:PLOT SI SG HEN#T 

150 DATA 12:82:46 16: 16:32,32,16:16:8:4,8,2,1 
164 DATA 63.4, .4,0, A, @, 61,01, ©, 81, 4, @, 6, 4 8 

174 DATA 323, É SE, HE SE SE: 3 és Lalaladadats 

189 DATA 65:38, 38, 32, 92, 98, 42, 98.641411: 
199 DATA 32.329,32, 32,88, 8€ 32:63; Ladsdololl: 








sl 
sd 
LE 


DA) 


+ 


Exercice 7.2 


Faites que la maison soit imprimée plus au milieu de 
l'écran et qu'il n'y ait pas le Ready. 


Exercice 7.3 


Le coin inférieur droit de la fenêtre n'est pas satis- 
faisant. Remédiez-y. Ajoutez une cheminée. 


113 


LA DECOUVERTE DE L'ORIC 
CARTE DE FRANCE 


Pour montrer notre maîtrise des graphiques, nous al- 
lons dessiner une silhouette de la France. 


La méthode est exactement la même que pour la maison 
à ceci près qu'il y a beaucoup plus de caractères à 
"programmer". 


La première chose à faire est de tracer une carte de 
France dans une grille géométriquement semblable à la 
maille de l'écran. On utilise une grille de 7 sur 7,5 
comme figure ci-dessous : 
















































































La figure montre aussi dans chaque carreau frontière, 
le caractère auquel se substituera le motif qui est dans 
ce carreau. On commence par espace qui reste tel quel, 

! qui devient le plein puis "# etc... 


La première étape sera d'imprimer la France avec ces 
caractères. " sera imprimé par CHR# puisqu'on ne peut 
le faire autrement. On remplace le ‘Copyright' qui est 
dans le même cas par '*' ce qui évite un 2ème CHR#. Le 
programme devra être tapé en mode minuscules puisqu'il 
y àa des minuscules à faire. Attention de taper les mots- 
clés Basic en majuscules (avec 'Shift'). 


La deuxième étape est de fournir les données de chacun 
des carreaux. Pour cela on examine chaque carreau super- 
posé à une minigrille 6x8. 


114 


LA DECOUVERTE DE L'ORIC 


On aura 

pour ! 63, huit fois 

pour " ÿ,1,15,31,63,63,63,63,63 
pour # 12,6%,62,62,62,63,63,63 
——--- etc. --- 


On aura donc une série de DATA commençant par 
... DATA 63,63,63,63,63,63,63,63,9,1,15,31,63,63,63,63, 
12,69... 
DATA 62,62,62,63,63,63,... 


C'est trop long ! Il y a 8# carreaux concernés, donc 
649 nombres. Chacun prend -avec la virgule- 2 ou 3 oc- 
tets donc 2,5 en moyenne soit 1699 octets. Ce n'est pas 
tant pour la taille-mémoire que pour la frappe que nous 
allons essayer de simplifier. 


Nous allons essayer de remplacer chacun des nombres 
qui viennent par un caractère. C'est possible puisque 
les nombres vont de ÿ à 63 et on pourrait prendre comme 
correspondance la fonction "code-32". La valeur 2 pose 
une difficulté car elle correspond à " qui ne peut être 
mis en DATA. Heureusement, nous n'en avons pas. Sinon, 
il aurait fallu mettre un test. Les caractères , : ‘! 
et espace en tête doivent être fournis entre guillemets 
dans les DATA. 


D'où le programme. 


10@ REM 
1091 REM CARTE DE FRANCE 
1802 REM . Le 
1810 DATA RE " ! AT ne En n LL n RON LU) n " >" 4 " Ph n 
@Px" | 0 
192@ DATA " K"," Le" UM PL LC RP PE HAXYE LL, BBAX 
KPPX ne : 
1030 DATAX_77//44, PHHPPPU." COOPER DEP AST DS : GPL 
1840 DATA " œP'" j LL st à ns Has n Prat VE ot ; LL Ris" n nt 
gen" ne 
105Q DATA "#°/7 710", UR M QPPKYC "NS CC 
SHEP Us >. 
1060 DATA "+11 7H", FFPORER #1! 54 js PU MORE OCR 
nm 


PL] PP EL CPE ET 


FR 


1878 DATA non OFF" 


1060 DATA "7//"HhI HMPPOR LAURE Me LU GARGPPU, IIS 
wi" 

1898 DATA PXHXP@PX: 
1188 DATA "litre 
#" 

1118 DATA us xPR à 
: "KP BE® 

1128 DATA "| CE 
xx 

1130 DATA 7! : "TER 


SJSJS 











115 


LA DECOUVERTE DE L'ORIC 











1 Gedri4: FÜR : 
REAC A$:FÜR Le TO.F 

1 HeASCEMIDSC AG, L+l, 1 
@ FÜKE G+SxR+L. A: HEATH 

1308 CLS: SPé$æe"":plRéænt" 

1918 FOR Isi TO 40: SP$=<SPS4" M: PLéæPL$+" DU HET 

1329 PRIHT:PRINT:PRINT:FRIMT 

330 FRINTLEFTS#E SP, 21 33 CHR Sd 9; 

1248 FRIHTLEFTS#ESPS$, 1 "TIRE" 

1352 PRIHTLEFTS$ EPS, 15" CUT" 

PRINTLEFTS GPS, 150 "—.#QIIITI111234" 

FPRIHTLEFTS#SPS, 1Ë957S 

FRIHT" Filéep"iLEFTSCELS. 15) 



















FRIHT" R"iLEFTSEPLS, SO )i"RT 
4 PRINT" ECO": LEFTS$E FL, 1402 
FRIHT" EF'iLEFTS#PLS, 155%: "6H" 
PRINTLEFTSCESFS, 1443 "TI" LEFTS6CPLS, 1453" UK" 
A PRIHTLEFTSC EPS, 14 5; "LS LEFT PL, 14 "M" 
FRINTLEFTSE SPS, 15 43 "MU LEFT#i FLE, 1: "0" 
: “pu 







Ps; 1903 "QU LEFT#C FLE, 1 
F MET'iLEFTHELS, 18%:"0" 
MU LEFTS#E PL, 1e "pi" 
"K" iLEFTS(PLS, tune 
j THE FLE, Lu: Le" 
FFE LP TéCPLS, 1 Den 
ni LITE label ta" 
'efahiltili k1® 





1 BE 












147 fi 















INTLEFTS# 
IHTLEFTS#C 
FÜR Ie1 TG 
QTOLELE 






Dans le listing ci-dessus, à cause de l'imprimante 
utilisée, le signe £ ("livre sterling") apparaît comme 
un "souligné" ('_'), par exemple, voir la ligne 1ÿ1ÿ. 


De 1919 à 1139 on a les DATA voulues. On a ajouté le 
dessin d'un damier en remplacement de 'q' car cela nous 
servira ultérieurement. 


De 1299 à 1239, on trouve la conversion des données 
et leur incorporation en mémoire. 


De 1399 à 1539, on trouve l'impression de la France 
avec les caractères du jeu standard. Remarquez comment 
on imprime des espaces ou des ! multiples. La France 
n'apparaît telle que nous la connaissons qu'après exécu- 
tion de 1699 qui fait passer au jeu auxiliaire. 


Le remplissage du générateur de caractères est long 
mais une fois qu'il est fait, on peut réobtenir la France 
en faisant seulement RUN 139ÿ. La photo de la page sui- 
vante montre le résultat obtenu. Les caractères qui ap- 
paraissent sur la ligne du haut sont dûs à une petite 
erreur de conception de l'ORIC : le 2ème générateur de 
caractères et la mémoire d'écran se recouvrent à partir 


116 


LA DECOUVERTE DE L'ORIC 


de l'adresse 48999 (code caractère 112, c'est-à-dire 
‘p'). Tant qu'on ne redéfinit pas les caractères jusque- 
là, cela va ; sinon, les premières lignes de l'écran 
sont troublées. 





Nous demandons aux lecteurs Corses de bien vouloir 
nous excuser de ne pas avoir fait figurer leur belle 
Ile sur notre carte, ainsi d'ailleurs qu'aux habitants 
des Îles côtières qui n'apparaissent pas. Pour les dé- 
dommager, nous proposons l'exercice suivant 


Exercice 7.4 


Cartographiez la Corse grâce à 
la grille ci-contre. 


Exercice 7.4 Bis 


Pour les lecteurs francophones, faites de même une 
carte de la Belgique, ou de la Suisse, ou du Québec... 


117 


LA DECOUVERTE DE L'ORIC 
QUIZ GEOGRAPHIQUE -— LES SOUS-PROGRAMMES 


Maintenant que nous disposons d'une carte de France, 
nous allons pouvoir l'utiliser pour jouer à un jeu 
utile. IL va nous permettre de réviser nos connaissances 
géographiques. Il s'agit de reconnaître l'emplacement 
des principales villes de France. Il y a deux formes de 
jeu, que nous implanterons toutes les deux. 


A. Le programme marque en damier un carreau sur l'écran; 
vous disposez de 2# secondes pour taper le nom de la 
ville qui s'y trouve. 


B. Le programme donne un nom de ville. Vous devez, à 
l'aide des touches mouvement de curseur, amener le 
caractère (damier, remplacement de ‘q'}) sur 
l'emplacement de cette ville. Tapez Return quand 
vous êtes satisfait de l'emplacement atteint. Bien 
sûr, vous disposez d'un temps limité. Ceci est la 
base des programmes d'enseignement assisté par ordi- 
nateur, très répandus maintenant. Bien entendu, on 
peut les perfectionner en examinant les erreurs 
faites, en affichant des indications pour vous aider 
et en comptabilisant les résultats. 


Nous avons vu précédemment tous les éléments qui per- 
mettent de le faire ; nous nous bornerons ici aux solu- 
tions les plus simples. 


Le programme obéit à l'ordinogramme général ci-contre. 


Cet ordinogramme est simplifié. Ce qui apparaît fon- 
damentalement, c'est que, en deux endroits, il faut 
exécuter la même opération : afficher la carte de France. 
Le programme de la carte est bien trop long pour le ré- 
péter en deux endroits. 


118 


LA DECOUVERTE DE L'ORIC 


Choix de la forme 
À ou B 
Oui & Non 
Tirage au hasard Tirage au hasard 
de la ville cherchée de la ville cherchée 


Affichage de la Affichage de la 
carte de France carte de France 


Marquage de ; = 
la ville Lit caractere 
tapé 


Lecture de la réponse 
; Effectue le 
0 
| Return mouvement 


T 
ue Analyse de 
la réponse 


Ce qui serait bon, c'est de disposer du mécanisme sui- 
vant. (cf figure ci-dessous). 


199 ALLER À 1909 









Le programme à répéter est 
écrit une seule fois, à 
partir de la ligne 1#99 par 
exemple. 






290 ALLER À 1990 


3 


sm 


TAPATEERTE À chaque fois qu'on doit 


l'exécuter (ici en 199 et 
x 299) une instruction qui 

ressemble à un GOTO fait 
sauter à 1999, où la séquence est exécutée. 


1619 RETOUR 


119 


LA DECOUVERTE DE L'ORIC 


La séquence se termine par une instruction qui veut dire 
"Retournez d'où vous venez". Etant venu de la ligne 149, 
retourner juste en-dessous de 199 (parcours en trait 
plein). Etant venu de 2ÿÿ, retourner juste en-dessous 

de 299 (parcours pointillé). 


En somme, c'est un mécanisme de saut qui se "souvient" 
d'où il vient. Ce mécanisme existe en Basic. 


Le programme utilisé plusieurs fois s'appelle un sous- 
programme. L'instruction de saut vers le sous-programme 
est l'instruction d'appel GOSUB: 1ÿ@ GOSUB 199. 


L'instruction de retour s'écrit tout simplement RETURN 
(les lettres RE T U R N, pas la touche 'Return'). 


Le programme a donc la structure : 


199 GOSUB 1999 
: programme principal 
299 GOSUB 1999 


1999 : sous-programme (ici de tracé 
1619 RETURN de la carte de France). 


Cette structure est extrêmement importante et puis- 
sante. Un programme peut appeler différents sous-pro- 
grammes. Chaque sous-programme peut en appeler d'autres. 
Dans tous les cas, l'ORIC s'y retrouvera pour effectuer 
les retours. 


Cette simplification de notre travail étant acquise, 
nous avons besoin d'une liste de villes avec leur nom 
et, pour chacune, ses coordonnées. X (de 1 à 38) et Y 
(de 1 à 26) qui la situent sur l'écran. Bien sûr, ces 
coordonnées seront approximatives, comme le dessin de 
la carte. 


Nous nous bornerons ici aux 11 villes suivantes (cela 
évite les instruction DIM, et rien n'empêche d'en ajou- 
ter ultérieurement). 


120 


LA DECOUVERTE DE L'ORIC 


Marseille L Strasbourg 


Lyon St-Etienne 
Toulouse 

Nice | Lille 
lBordeaux 





Les préliminaires du programme sont alors simples. Le 
tableau précédent est mis sous forme de DATA (lignes 19, 
15, 29) qui sont ensuite lues (lignes 39 et 4@). 

Ensuite, c'est le choix du mode (ligne 5% et 6ÿ). (Pour 
une utilisation réelle du programme, il faudrait impri- 
mer beaucoup plus d'explications que nous ne le faisons). 


Avant de taper ce programme, chargez votre programme 
carte de France et ajoutez une ligne 199 REM. Changez 
la ligne 1619 en 161ÿ RETURN. Ajoutez aussi un 125% 
RETURN: cela sépare en un autre sous-programme le rem- 
plissage du générateur de caractères qui n'a pas à être 
répété. 

FRCIGRANME C3 QUIZ GÉOGRAPHIQUE 


1A DATA FARIS, MARSEILLE, LYON, TOULOUSE, MICE, BORDEL 
HANTES 

15 DATA STRASBOURG, SAINT ETIJEMNNESLE HAVYRE, LILLE 

A DATA Ra A BG ES Ta dés El El ES El 18,18 5, LE 





4, à 

SA FOR Ve TO L@:REGD HOME WE MEXT 

4 FOR Wed TO LÉ: REC LITE IE Mo MERT 

45 CLS:FRINT'UN PEU DE PATIENCE SYP':GOSUS 154% 
se CLS: IHPUT'A OÙ & "ii 

ee We TIMTE LIÆRMDE L 5 

SA IF best" GOTO SA 


En fait, le tirage de la ville voulue est commun et 
en 55 
55 V=INT(IL*RND(1)): 
Les initialisations du temps se font par un simple DOKE 
639,65535 en 72 et 519. 
Jeu A 


On se trouve après 7ÿ 

FA PRINT'JEU A:YQUS TAPEZ LE HOM DE LA WILLE MARGUEE 
M CHREC LEE à 

" PUIS Return” 


121 


LA DECOUVERTE DE L'ORIC 


72 GOSUB SAGG:COKE 638. 63235 
PS Belle ei 

an GOSUE 1384 :C$="": FLOT K:Y:11: 

85 IF 6ESS3S-DEEKRC 63612240 GOTO 174 
a E$<KETS:IF Egz"" COTO 85 

LA IF E$=CHRSe 13 GOTO 154 

185 PEINT Ef: 

114 CheCé+Eé: GOT 85 

158 IF Cé=NOMS& 5 GOTO 188 

164 CLS: PRINT'HON":GOSUE S6@@: GOT F5 
174 CLS: PRINT'PFERDU":GOTO 192 

LS CLS: PRIHT'GAGHE" 

134 INPUT'OH RECOMMENCE "4x 

195 IF #$="OUI" GOTO 54 

EAg END 


Le programme est bâti avec des matériaux déjà vus, no- 
tamment la construction caractère par caractère du nom 
C$ de la ville proposée par l'élève (instructions 89 à 
119). 

En 72 et en 169, délais pour fixer l'affichage. 

En 89, on affiche la carte par GOSUB 1399 (le générateur 
de caractères a été rempli une bonne fois par GOSUB 199@ 
en 45). 113 est le code du damier pour marquer la ville : 
on l'inscrit aux coordonnées X et Y de la ville, cal- 
culées en 75. 


Les délais sont faits par boucle, car WAIT perturbe- 
rait les calculs de temps. Là encore, on utilise un sous- 
programme en 5ÿÿÿ. 

Le reste du programme ne devrait pas faire de diffi- 
culté ; nous passons donc au jeu B. 


Jeu B 
Nous sommes cette fois après la ligne 599 
398 PRIHT'UEL EE: AVEC LES TOUCHES CURSEUR, VUS REA 















PRIHT" SUR LA VILLE MH LIE 0 
à CE ï 1 HÉEU GUGUR € 

et : CIOIKE 

1300 


AH: T2: PLOT K:Y:113 








UTC 174 


SSû 1F EbeCHRSC 105 THEN vert 


122 


LA DECOUVERTE DE L'ORIC 


39 IF ES=eCHRSe 112 THEN Yæv-1 

SA GOTO Se 

P@ IF Hell AND Vel ws GOTO 184 

5 CLS: PRINT NON": GOSUE SA@a: COTO SAIS 


X et Y initialisés à 4 et 11, indiquent l'emplacement 
du curseur gris (code écran 113). 
Là encore, pour des raisons d'interactivité, on utilise 
KEYS pour examiner la touche enfoncée. Selon la touche 
utilisée, le mouvement est réalisé, c'est-à-dire que X 
ou Y sont modifiés. La touche ‘Return' est testée par 
CHR$ puisqu'on ne peut la mettre entre guillemets. 


Le mouvement, ligne 537 et 529, est réalisé, replaçant 
l'ancien contenu C en X,Y. Le curseur gris est alors dé- 
placé à la nouvelle position. 


Lorsque l'utilisateur tape 'Return', le X et le Y at- 
teints sont alors l'emplacement proposé. Celui-ci est 
comparé aux données des tableaux II et JJ. 


L'ordre des instructions, en 51#, 515 est tel que lors- 
que la réponse est NON une autre tentative est possible. 
On reprend alors à la position proposée à l'essai pré- 
cédent, ce qui permet d'atteindre le but par des faibles 
corrections successives. 

Pour l'ensemble des essais, le temps est limité à 3 mn 
(contre 3ÿ s dans le jeu A). 


Le sous-programme en 59ÿ9 crée un délai. 
SGA FOR Bel TO 1488: MENT: RETURN 


RECAPITULATION 


Ce programme, qui est l'archétype des programmes uti- 
lisés en enseignement assisté par ordinateur, n'utilise 
que les techniques simples qui ont été progressivement 
introduites au cours du jeu "devinez un nombre" et pour 
la programmation du dessin d'une maison. 


La seule technique nouvelle introduite ici - et elle 
est très importante - est celle des sous-programmes. 


Avec un simple GOSUB, le tracé de la carte de France 


est effectué chaque fois que nécessaire dans le pro- 
gramme. 


123 


LA DECOUVERTE DE L'ORIC 


La fonction KEYS apporte également une bonne interac- 
tivité dans le dialogue homme machine, essentielle dans 
cette application. 


Nous ne proposons pas ici d'exercice sur ce programme, 
construit pas à pas, mais nous ne saurions trop encou- 
rager le lecteur à s'exercer à y apporter toutes les 
modifications qu'il jugerait bon d'essayer. Vous pouvez 
notamment vous inspirer des dernières versions du pro- 
gramme B pour gérer les "scores" obtenus par différents 
élèves. Vous pouvez aussi changer les délais et ajouter 
des villes (Dans ce cas, attention à DIM...) 


Remarque : Le sous-programme carte de France a été 
écrit à partir de 1999, de façon à en permettre une uti- 
lisation dans plusieurs programmes. Vous le stockez sur 
cassette, et lorsque vous souhaitez l'incorporer à un 
programme à écrire, vous le chargez en premier. Puis 
vous écrivez votre programme de ÿ à 999. 


Cette façon de procéder, qui nous a évité la recopie 
fastidieuse d'une partie de programme, est généralisa- 
ble. Mais attention ! Vous ne pouvez l'utiliser qu'une 
fois par programme. 


Maintenant que nous avons des affichages très élabo- 
rés, il nous reste à donner un peu de mouvement. 


NOTIONS SUR LES DESSINS ANIMES 


Nous nous bornerons ici aux premières notions permet- 
tant d'animer l'affichage de l'ORIC. 


La première méthode qui vient à l'esprit est la mé- 
thode classique utilisée au cinéma. La scène est décom- 
posée en un grand nombre de dessins qui sont projetés 
successivement. 


Avec l'ORIC, qui est pourtant un des micro-ordinateurs 
personnels les plus rapides, se pose le problème du 
temps de remplissage de l'écran pour obtenir une image. 
D'autant plus que, pour ne pas avoir trop de scintille- 
ment, il faut afficher au moins 15 images seconde. Ceci 
nécessite le recours au langage machine qui est étudié 
dans un autre ouvrage de cette collection. 


Pour pouvoir utiliser Basic, il faut passer d'une 
image à la suivante en ne changeant qu'une très petite 


124 


LA DECOUVERTE DE L'ORIC 


partie de l'image. On peut utiliser, au choix, des PRINT 
ou, mieux (plus rapide), des POKE dans la mémoire 
d'écran ou des PLOT. 


MOUVEMENTS D'UNE BALLE 


A titre d'exemple d'animation, sans modification im- 
portante d'une image à la suivante, nous allons faire 
se déplacer une balle sur l'écran. Cela conduira à un 
embryon de jeu de tennis. La balle, nous l'avons par 
modification du générateur de caractères au début de ce 
chapitre. 


Pour déplacer la balle de gauche à droite, il faut 


- créer la balle. On implante le programme D-1A sous 
forme de sous-programme à partir de 599 et on fait 
19 GOSUB 599. 


- imprimer la balle 
29 X=... :Y=... :PLOT X,Y,"*x" 


- revenir sur la balle et la remplacer par un blanc, 
puis imprimer une nouvelle balle 1 cran plus loin. 
39 PLOT X,Y,32:X=X+1:PLOT X,Y,"*" 


- boucler sur l'instruction 39 : 49 GOTO 3ÿ 

Essayez le programme formé par les trois instructions, 
19, 29, 39 ci-dessus. 

Il y a plusieurs défauts 


- il faudrait vider l'écran et se placer sur la ligne 
centrale (13) : 


- lorsque la balle a parcouru tout l'écran de gauche à 
droite, on a un message d'erreur ; 


- il n'y a pas de réglage de vitesse. 
La première objection se résout facilement par le 
choix Y=13. 


Pour la troisième, il faut introduire un délai avant 
de faire le GOTO en 3%, par exemple à l'aide de l'ins- 
truction WAIT 
49 WAIT D:GOTO 3ÿ 


D sert à régler le délai dans la vitesse de déplacement. 


Pour la deuxième objection, on peut décider le mouve- 
ment suivant : aller de gauche à droite, puis, quand la 


125 


LA DECOUVERTE DE L'ORIC 


balle arrive à l'extrémité de la ligne, aller de droite 
à gauche etc. 
Pour cela, il faut tester X. Le sens est inversé quand 
X = 38 ou 1. 


Pour que la balle se déplace à gauche, il faut écrire 
59 :PLOT X,Y,32:X=X-1:PLOT X,Y,"*x" 
D'où le programme 


FRCGEAMME De 


1a GOSUESAQ: CLS 
24 KeliVe18:PLOT K,v, "4": Des 







Sg PLOT + Rex : PLOT HT UK" 
Hi MAIT 35 GOTO 34 

SA FLOT #: H] : PLOT Hat UT 
56 WAIT GOTO SE 


Fa GOTO SE 
ge CGedé se: REASCE EN 

Sig FOR Le TO F:READ # 

Se0 FÛKE G+HSÆR+L HET 

539 FETLKH 

540 DATA AS, 68,63. 68, 63, 0,4 


Les 


Avec D = 6, vous réalisez un véritable hypnotiseur. 
Avec D < 3, la balle va assez vite pour que l'on croie 
voir un sillage. Avec D > 10, les saccades du mouvement 
sont apparentes. 


Exercice 7.5 


Faire osciller la valeur du délai entre 1 et 10. (Le 
délai varie de 1 à chaque aller et retour). 


Exercice 7.6 


Faire osciller la balle du haut en bas de l'écran. 


Exercice 7.7 


Faire aller la balle en diagonale (du coin gauche à 
la dernière ligne position 26 et retour). 


126 


LA DECOUVERTE DE L'ORIC 


TENNIS 


Nous sommes prêts maintenant à jouer au tennis. En 
fait, notre jeu sera rudimentaire. Partons de la balle 
qui oscille de gauche à droite, nous disposons un joueur 
à droite et un joueur à gauche. Le joueur de droite ne 
doit pas laisser la balle passer la position 38 sur 
l'écran. Pour manifester qu'il rattrape la balle, il 
doit appuyer sur une touche. Nous adopterons la touche 
/. Pour le joueur de gauche ce sera la touche Z. Le pro- 
gramme reconnaîtra la touche grâce à un KEY$. 


Par ailleurs, nous imposons aux joueurs de ne pas ap- 
puyer trop tôt sur leur touche : si le joueur de droite 
appuie sur / avant que la balle ne soit en colonne 34, 
ou si le joueur de gauche appuie sur Z avant qu'elle 
ne soit en colonne 5, il concède un point à son adver- 
saire. 


A chaque point, le score est affiché. Le service sera 
effectué en appuyant sur une touche quelconque. Lors du 
service, la balle part du milieu de l'écran. Le sens du 
mouvement est tiré au sort. 


Enfin on a implanté le mouvement de la balle dans un 
sous-programme : 4ÿÿ. 


D'où le programme D-5 dont il y aurait lieu de perfec- 
tionner la présentation pour obtenir un jeu effectif. 
En particulier, le fait que les colonnes z et ÿ soient 
blanches est trompeur pour le joueur de gauche. 


FROGRAMME DS 
MIMHI-TENNIS 


18 GOSLESAR : SG=Q : ED: D=3 

15 CLS :PRINTSG: SPC 30 2:60 :K=19:GET AS 

24 IF FENDC13>.5 GOTO 45 

25 MAIT D'k=K+1:IF K=39 THEN SG<8G+1:GO0TO 15 
38 GOSUE 400: A$<KEvS: IF A$<>"/# COTE 25 

35 IF K>=34 GOTO 45 

4ÿ SGeSG+1:GOTO 15 

45 MRIT DikekK-1:IF K=@ THEN SD=5D+i:GOTO 15 
sû GOSUE 4QG:AS=KETS: IF A$<>"2" GOTO 45 

55 IF K£+5 GOTO 25 

6@ SD=50+1:GO0TO 15 
2:Hek:PLOT K:13, "#4": RETURN 
R=ASCC "4" 

Leg TO F'RERD 

POLE G+S#R+L, He NEXT 

54 RETURH 

4û DATA .39,63,63.63.63, 30.0 





















127 


LA DECOUVERTE DE L'ORIC 


LA COULEUR EN HAUTE RESOLUTION - 
LA COMMANDE FILL 


Il nous reste à voir une dernière instruction gra- 
phique de l'ORIC, très puissante mais assez délicate, 
FILL. 


Revenons d'abord au schéma de l'écran haute résolution 
en tête de ce chapitre. Si l'on met par POKE un octet à 
une adresse de 4996 à 48959 on doit avoir un affichage 
sur l'écran : 6 points élémentaires correspondant à la 
case mémoire vont se trouver allumés ou éteints selon 
la valeur (qui, elle, est sur 8 bits) écrite dans la mé- 


moire. 


Toute la difficulté est dans la correspondance entre 
le motif binaire d'allumage (6 bits) et la valeur à met- 
tre (8 bits). Voici la marche à suivre 


1- déterminer d'abord le motif d'allumage. On procède 
exactement comme nous avons fait pour une ligne élé- 
mentaire de caractère programmable. 


Exemple : supposons qu'on veuille un pointillé comme 


on a roc À en binaire, donc la valeur 13. 


2- le problème est que l'ORIC considère les valeurs in- 
férieures ou égales à 31 comme des attributs et non 
des motifs d'allumage. 


La règle est la suivante : st la valeur obtenue est 
<31, on ajoute 64. Dans notre exemple, on obtiendrait 77. 
Essayez : HIRES:POKE 4996%,77. Vous obtenez bien ..s 


Si la valeur est supérieure ou égale à 32, on peut au 
choix la prendre telle quelle ou ajouter 64, le résul- 
tat est le même. 


Que font les octets dont le bit 7 est à 1 ? Eh bien 
le bit 7 (qui revient à ajouter 128) a pour effet d'in- 
verser le motif dessiné. 


Exemple : POKE 4996ÿ,295 donne le pointillé =..s 
Maintenant, si k<31, 128+k donne le même attribut. 


En résumé 


(1) 128 

; attributs : attributs 

31 159 

32 169 ; . 

x ; è dessins inverses 
: dessins x de 32 63 

63 191 Sa 


128 


LA DECOUVERTE DE L'ORIC 


64 192 


: dessins 
: dessins a | 
95 223 inverses 
96 : . 224 ï 
É mêmes dessins : dessins 
127 que 32..63 255 inverses 


Etant donné un motif, il y a trois manières de l'obte- 
nir. Soit k la valeur 6 bits correspondante. ÿW<k<63. 


Si k<31, on a déjà £1-=-k+64. Soit k'=63-k : c'est la 
valeur du dessin complémentaire. k' est >31 donc le des- 
sin complémentaire s'obtient par k' et k'+64. Par suite 
le dessin primitif s'obtient par k=128+k'=191-k et 
K=128+k'+64=255-Kk, 


Exercice 7.8 


Donnez les valeurs st k»>32. 


Pour les valeurs £<31, les attributs jouent le même 
rôle qu'on a vu en basse résolution, résumé par le ta- 
bleau de la page 98. La propriété fondamentale qui 
demeure est qu'un attribut est valable depuis sa posi- 
tion jusqu'à la fin de la ligne élémentaire où il se 
trouve, à moins que, plus à droite, sur cette ligne élé- 
mentaire on ne rencontre un autre attribut qui le con- 
tredise : c'est alors lui qui devient valable jusqu'à 
la fin de la ligne élémentaire. 


Lorsqu'on met un attribut de couleur de fond, on ob- 
tient toute la fin de la ligne élémentaire concernée de 
la couleur indiquée. 


Exemple : POKE 4ÿ96ÿ,2ÿ rend bleue toute la lère ligne. 
Si l'on fait ensuite POKE 4ÿ961,17, la ligne devient 
rouge, sauf le premier segment qui reste bleu. 


Il y a une constatation importante à faire : on ne 
peut pas, en horizontal, faire varier les couleurs sur 
une distance inférieure à un segment (c'est-à-dire 6 
points élémentaires). Au contraire, en vertical, la cou- 
leur peut changer d'une ligne élémentaire à l'autre. 


Autrement dit, en mode haute résolution, la résolution 
pour les tracés en deux couleurs (fond et courbe) est de 
199 sur 249, tandis que la résolution pour les dessins 
multicolores n'est que de 199 sur 4ÿ. 


129 


LA DECOUVERTE DE L'ORIC 


L'instruction FILL 


On pourrait faire des dessins haute résolution par 
POKE en 4996 et suivantes : on a vu comment éclairer 
les points voulus. Mais -on l'a vu au chapitre précé- 
dent- le Basic de l'ORIC a les instructions CURSET, 
DRAW etc... qui sont beaucoup plus simples d'emploi. 


Eh bien lorsqu'il s'agit de placer des attributs ou 
des motifs, le Basic offre la commande FILL. Elle est 
de la forme : 


FILL NLE,NS,M 
Ceci remplit du même motif M,NS segments sur NLE 


lignes élémentaires. (1<NLE<29@ ; I<NS<4ÿ ÿ<M<255). 
Si M est un attribut, il suffit que NS=1. 


Oui, mais où commence le remplissage ? À la position 
X,Y définie par le dernier CURSET. 


Exemple faire un fond jaune à la moitié droite de 


l'écran : 
CURSET 129,9,9 :FILL 299,1,19 


Exercice 7.9 


Faire un fond jaune sur tout l'écran. 


Exercice 7.10 


Faire le drapeau français. 


Exercice 7.11 


Couvrir la moitié haute de l'écran avec des rayures 
verticales très fines et la moitié basse avec des 
rayures moins fines. 


Il faut noter que, avant un FILL, CURSET X,..., CURSET 
X+1,..., CURSET X+2,... ...CURSET X+5,... sont équiva- 
lents puisque FILL ne peut porter que sur des segments 
entiers. Quelque soit X, le FILL commence au segment n° 
INT(X/6). 


En outre, FILL ne met pas le curseur à jour. Tous les 
FILL doivent être précédés d'un CURSET. 


Nous allons appliquer ceci pour dessiner un disque de 
couleur. Pour cela, on va faire un FILL à partir de 


130 


LA DECOUVERTE DE L'ORIC 


chaque segment gauche du disque donné par l'équation 
XX=2@-INT(19*SOR(1-(Y-1##)12/19999)) et on refait un 
FILL du fond noir à partir du segment de droite donné 
par XX=2@+INT(19*SOR(1-(Y-19#)t2/19099)). 


Le 19 (multiplicateur de SQR) a peut-être à être rec- 
tifié en fonction de votre téléviseur pour que le disque 
soit bien rond. Sur le nôtre, nous avons été amenés à 
la formule ...INT(Y.5+14%*SOR...) 


PROGRAMME Lis 





Exercice 7.12 


Faites que le disque soit clignotant (toujours bleu 
sur noir). 


RECAPITULATION 


Nous avons maintenant eu un aperçu de la plupart des 
techniques de programmation accessibles à lL'ORIC, tant 
dans les domaines du calcul que dans celui des jeux et 
des traitements graphiques. 


A propos des dessins animés, nous avons vu que le 
Basic est un peu lent pour certaines applications. 


Dans ce cas, il y a un recours c'est le langage 
machine du microprocesseur de l'ORIC. 


Les techniques correspondantes seront abordées dans 
un autre ouvrage de cette collection. 


137 


LA DECOUVERTE DE L'ORIC 

















LA DECOUVERTE DE L'ORIC 


CHAPITRE VIII 
EFFETS SONORES 


Voilà un chapitre qui va faire du bruit ! En effet, 
l'ORIC possède un petit haut-parleur avec lequel il est 
capable de produire des sons variés. 


Il y a d'abord quatre instructions qui font chacune 
un bruit prédéfini, très utile dans les jeux 


EXPLODE : bruit d'explosion ; 


PING : bruit de triangle ("ding" très aigu) : 
SHOOT : bruit de coup de feu ; 
et ZAP : bruit de canon laser. Gare ! si les Extra- 


terrestres se mettent à tirer ! 


I1 faut noter que la combinaison de touches ‘'Ctrl' G, 
ou encore PRINT CHR#(7) produit le même son que PING. 
On peut même le dissimuler dans une chaîne de carac- 
tères 





A$="XXX'"'+CHRY(7)+"YYY': PRINT AG 


Ces sons prédéfinis ne sont que des combinaisons des 
instructions sonores de base SOUND, MUSIC et PLAY. Ils 
mettent en jeu trois voix indépendantes, chacune pouvant 
être mélangée à une voix de bruit. 


SOUND est de la forme 


SOUND NV,P,V 
où e NV est le numéro de voix 1, 2 ou 3 
si NV=4,5 ou 6, la voix (resp. 1,2 ou 3) est mé- 
langée à du bruit. 


133 


LA DECOUVERTE DE L'ORIC 


e P est proportionnelle à la période du son. La 
fréquence est donnée approximativement par F= 
62999/P. Cette formule n'a pas d'importance puis- 
que les notes peuvent être obtenues directement 
par MUSIC. 


e V est le volume de 1 (le plus faible) à 15 (trop 


fort!). 
Prenez une valeur moyenne de 5 à 8. Si V=ÿ#, on 
n'a pas de son immédiatement : on le prépare 


pour exécution ultérieure par PLAY. 


Exemple : SOUND 1,14ÿ,19 donne le la du violon 


MUSIC est de la forme 


MUSIC NV,0C,NO,V 
où e NV est le numéro de voix 1, 2 ou 3 
(pas de 4, 5 ou 6 : on ne mélange pas la musique 
et les bruits malgré l'opinion du Roi des Belges 
Albert ler (1)) 


e OC est le numéro d'octave dans l'échelle bien 


connue des musiciens : l'octave du milieu du pia- 
no est 3. Les numéros acceptés par l'ORIC vont 
de ÿ à 6. 
e NO est le numéro de note de 1 à 12 avec la cor- 
respondance 
1 DO 5 MI 9 SOL# 
2 DO# 6 FA 19 LA 
3 RE 7  FA# 11 LA4 
4 RE# 8 SOL 12 SI 


e V est le volume comme pour SOUND, en particulier 
la valeur ÿ pour exécution différée. 


Exemple : MUSIC 1,3,1ÿ#,19 donne le la du violon. 


Seul le canal 1 (ou 4) peut être activé directement. 
Les autres doivent être combinés en mode différé par 
PLAY. Les commandes SOUND ou MUSIC ont pour seul effet 
de lancer le son. Celui-ci continue ensuite. C'est 
d'ailleurs ce qui permet de faire des accords en lan- 
çant plusieurs sons. 


(1) Lorsque sa femme a fondé le concours "Reine Elisabeth de vio- 
lon", il aurait déclaré : "la musique est le moyen le plus coûteux 
de faire du bruit". Il ne connaissait pas les microordinateurs ! 


134 


LA DECOUVERTE DE L'ORIC 


Vous pouvez suivre le schéma très simple : 


lancer le son 
(SOUND ou MUSIC) 


générer un délai 
(WAIT p.ex.) 





arrêter le son 


Pour arrêter le son dans un programme, il suffit de 
faire un SOUND ou un MUSIC avec V=ÿ sur la voix concer- 
née. 


Si un programme s'arrête par STOP, END ou 'Ctrl' cC, 
alors qu'un son est lancé, le son continue. Pour l'arrê- 
ter en mode direct, il suffit de taper sur une touche 
quelconque, du moins quand on est dans le mode où les 
touches produisent un bip. On passe du mode bip au mode 
touches silencieuses et vice-versa en faisant 'Ctrl' F. 





Pour combiner des sons, la commande PLAY est plus fa- 
cile et surtout plus riche de possibilités. Elle est de 
la forme : 


PLAY S,B,E,D 
où e S (de ÿ à 7) indique la combinaison de voix de 
son pur activées : 
Sa, 27 
k actives 


EA voix actives ER voix actives 


c'est-à-dire : 


ve 
: 3 . 1 
2 3 et 2 
3 1 : 2 les trois 


Le son des voix dont on demande l'activation doit préa- 
lablement avoir été défini par un SOUND ... ÿ, ou un 
MUSIC ..., ÿ. 





135 


LA DECOUVERTE DE L'ORIC 


e B (de ÿ à 7) indique la combinaison de voix 
bruitées activées : 


B = > ae 
k actives 


Le fonctionnement est le même que pour S et la défini- 
tion préalable du bruit est tout aussi obligatoire. 


e E (de 1 à 7) définit l'enveloppe du son suivant 
les schémas 





intensité 
1 2 
temps t 
+ << 
D D 
3 
<— 
D 
5 
——) 
D 
Les modes 1 et 2 sont finis dans le temps. Les autres 
sont de durée illimitée (= jusqu'à ce qu'on arrête le 
son). Les modes 3, 4 et 6 sont périodiques. 5 est le 
plus curieux : un coup, puis le son continu. Le mode 1 


avec une durée D assez longue est valable pour imiter 
le piano. Avec une durée très courte il imite un des 
modes du clavecin. 5 ou 7 avec D très petit donnent un 
son continu valable pour l'orgue ou la flûte. 


e D (de Ÿ à 32767) définit la durée telle qu'elle 
est figurée sur les schémas ci-dessus. Donc pour 
les modes périodiques c'est la période (la demi- 
période pour 4). Pour les autres, c'est le temps 
de croissance ou décroissance. (Bien sûr, cette 
période de l'intensité n'a rien à voir avec la 
période qui définit la hauteur du son). 


136 


LA DECOUVERTE DE L'ORIC 


D est exprimée en demi-millisecondes. Si D=1#99 on a 
un temps de seconde. Si D<5ÿ pour les modes 1 ou 2, 
on n'entend rien. 


Pour mieux nous habituer aux différents effets pos- 
sibles, nous implantons le programme suivant 


ESSAIS D'ENVELOPPES 


19 INPUT"'E,D":E,D 
29 MUSIC 1,3,19,9 
39 PLAY 1,9,E,D 

49 GET A$:GOTO 19 


Exercice 8.1 

Quelle note obtient-on ? Que fait l'instruction 49 ? 
Question : Dans le couple SOUND...#ÿ ou MUSIC...#, PLAY 
il n'y a aucun réglage de l'intensité sonore ? 


- En effet. Le palier ou le maximum de l'enveloppe 
correspond au réglage 15. Pour un mode 1 ou 2 on peut 
jouer entre la durée D et la durée réelle du son. 


LES BRUITS 


Là encore, l'expérimentation sera notre meilleur outil. 
Pour nous y aider, nous introduisons le programme 


ESSAIS DE BRUITS 


19 INPUT"P,E,D":P,E,D 
29 SOUND 4,P,9 

39 PLAY Ÿ,1,E,D 

49 GET A$:GOTO 19 


Pour P, les seules valeurs utiles vont de ÿ à 63 avec 


9,1 sifflements 
2,3,4 réacteurs, fuites de gaz 
5 - 8 tempête, lance flamme 
9 — 16 vent 
17 - 39 machines, explosion 
31 - 63 avions, grondements. 
I1 faut aussi jouer sur E et D : ainsi la combinaison 


P=31, E=1, D-5999 figure assez bien une explosion 
P=31, E=1, D-1#ÿÿ figure assez bien un coup de feu 


137 


LA DECOUVERTE DE L'ORIC 


63,4,89 figure assez bien un petit avion. 
31,4,19999 figure les vagues de l'océan... 


A vous d'expérimenter ! 


I1 faut aussi essayer du côté des sons purs, des mé- 
langes de voix. Par exemple, deux voix à l'octave l'une 
de l'autre donnent un son très suave 


essayez 19 MUSIC 1,3,19,9 
29 MUSIC 2,4,19,9 
39 PLAY 3,9,7,1 


Exercice 8.2 
Produire l'accord DO MI SOL. 


Exercice 8.3 


Dans le jeu de Quiz-Géo, quand le joueur a gagné, 
faites retentir les premières notes de la Marseillaise. 
(ré ré, ré sol, sol la, Ta ré, si sol). 


Exercice 8.4 (jeu de SIMON - marque déposée) 


On établit une correspondance entre les touches 1 à 7 
et les notes de la gamme. Le programme choisit au hasard 
une séquence de 4 notes : il la fait retentir tout en 
affichant sur tout l'écran les couleurs correspondantes. 
Le joueur doit alors taper la séquence correspondante. 
Pendant qu'il appuie sur une touche le programme fait 
retentir la note et affiche la couleur. On autorise 
deux tentatives pour trouver une séquence. 


RECAPITULATION 
Nous avons maintenant à peu près exploré toutes les 
ressources spectaculaires de l'ORIC. 


Nous voici arrivés au terme de ce livre, au terme de 
notre découverte de l'ORIC. 


I1 faut convenir que c'est là une merveilleuse ma- 
chine, surtout en regard de son prix. 


138 


LA DECOUVERTE DE L'ORIC 


Ses possibilités sont immenses ; nous n'en avons dé- 
couvert qu'une petite partie, tant en calcul, en ges- 
tion, en machine de loisirs ou d'éducation : notre 
programme de quiz géographique vous permet de réviser 
votre géographie en vous amusant... Les possibilités de 
traitement graphique sont spécialement utiles dans ce 
contexte, et spécialement perfectionnées sur l'ORIC. 


Nous laissons maintenant le champ libre à votre ima- 
gination pour en tirer le meilleur parti. 


139 


ABS 
ATN 


cos 


DEEK 


EXP 


FALSE 
FRE 


HEX$ 


INT 


KEY$ 


LN 


LOG 
PEEK 


LA DECOUVERTE DE L'ORIC 


ANNEXE IT 


Fonctions et mots-clés du Basic 


FONCTIONS ARITHMETIQUES 


Valeur absolue de l'argument entre parenthèses. 


Arc tangente - le résultat est en radians, com- 
pris entre -PI/2 et PI/2. 
Cosinus - l'argument doit être en radians. 


Exemple : cos(x en degrés) = COS (PI*x/189#). 


fournit le contenu (compris entre # et 65535) du 
double octet d'adresse indiquée, considéré comme 
un entier 16 bits, dans l'ordre partie basse, 
partie haute. 

Pour écrire un double octet en mémoire, voir 
DOKE page 145. 


Exponentielle e*. L'argument doit être <88, sinon 
il se produit un dépassement de capacité. 


Valeur ÿ ('fausse" dans les expressions logiques). 


Quelle que soit la valeur de l'argument, fournit 
le nombre d'octets restés libres en mémoire. 
Exemple : juste après la mise sous tension, ?FRE 
(9) fournit 39421 (46588 après GRAB). ?FRE("") 
force un ménage dans la mémoire. 


convertit son argument (compris entre ÿ et 65535) 
en hexadécimal. 


Partie entière, ou plutôt plus grand entier infé- 
rieur ou égal à l'argument : INT(YW.5) vaut ÿ ; 
(INT(5) vaut 5, INT(-Y.5) vaut -1, INT(-3) vaut 
3. 


(pas d'argument). Fournit le caractère actuelle- 
ment tapé au clavier. 


Logarithme naturel (népérien, ou en base e). 
Pour obtenir le logarithme de X en base Y, utili- 
ser LN(X)/LN(Y). 


Logarithme en base 1#. 


Fournit le contenu (compris entre # et 255) de la 
case mémoire dont l'adresse est égale à son argu- 
ment (qui doit être entier et compris entre ÿ et 
65535). 

Pour écrire en mémoire, voir POKE, page 148. 


141 


PI 
POINT 


Pos 


RND 


SCRN 


SGN 


SIN 


SPC 


SQR 


TAB 


TAN 
TRUE 
USR 


LA DECOUVERTE DE L'ORIC 


Valeur de 1. 
Renvoie ÿ si le point élémentaire indiqué est 
éteint, -l1 s'il est allumé. 


POS(#) fournit la prochaine position d'impression 
libre sur la ligne d'écran (position du curseur). 


Fournit un nombre pseudo-aléatoire compris entre 
® et 1. Voir l'explication détaillée au chapitre V. 


Renvoie le code-caractère présent sur l'écran 
aux coordonnées X et Y fournies comme arguments. 


Fonction "signe" : 1 si X>ÿ, -1 si X<ÿ et ÿ si 
x=#. 
Sinus - l'argument est supposé en radians. 


Ne peut s'employer que dans une instruction PRINT. 
PRINT SPC(I) imprime I espaces. I doit être entier 
compris entre ÿ et 255. 


Racine carrée. L'argument doit être supérieur ou 
égal à 9. 

Ne peut s'employer que dans une instruction PRINT. 
PRINT TAB(I); fait aller à la position d'impres- 
sion n° I(ÿ est la position la plus à gauche 
d'une ligne, 39 la plus à droite). I doit être 
compris entre ÿ et 255. Si I<position où l'on est 
déjà, il n'y a pas d'action, c'est-à-dire que la 
prochaine impression se fera là où on était posi- 
tionné. Remarque : cette fonction ne marche pas 
sur les versions actuelles de l'ORIC-1, mais marche 
sur l'ATMOS. 


Tangente - l'argument est supposé en radians. 
Valeur -1 ("Vrai" dans les expressions logiques). 


Appel d'un programme utilisateur en langage- 
machine. (avec transmission d'un argument, à la 
différence de SYsS). 


FONCTIONS CHAINES 


Les fonctions portant sur les chaînes de caractères 
sont décrites dans le chapitre V. 


Nous 
LEN(X$) 


donnons ci-après leur liste pour mémoire. 


Longueur 


LEFTS(X$S,N) Extraction à gauche 


RIGHTS ( 


X$,N) Extraction à droite 


MIDS(XS,K) ou MIDS(X$,K,N) extraction au milieu 


ASC(X$) 


Conversion de caractère en ASCII 


142 


LA DECOUVERTE DE L'ORIC 


CHR$S(K) Conversion d'ASCII en caractère 
STR$(A) Représentation d'un nombre 
VAL(XS$) Valeur représentée par une chaîne. 


MOTS-CLES RESERVES EN BASIC 


ABS EXPLODE MUSIC RND 
AND FILL NEW RUN 
ASC FN NEXT SCRN 
ATN FOR NOT SGN 
CALL FRE ON SHOOT 
CHAR GET OR SIN 
CHRÉ GOSUB PAPER SOUND 
CIRCLE GOTO PATTERN SPC 
CLEAR GRAB PEEK SOR 
CLOAD HEX$ PING STEP 
CES HIMEM PLAY sTor 
CONT HIRES PLOT STRS 
cos IF POINT TAB 
CURMOV INK POKE TAN 
CURSET INPUT POP TEXT 
CSAVE INT POS THEN 
DATA LEFTS PRINT TO 
DEEK LEN PULL TROFF 
DEF LET READ TRON 
DIM B'TST RELEASE UNTIL 
DOKE LLIST REM USR 
DRAW L'N REPEAT VAL 
ELSE LOG RESTORE WAIT 
END LORES RETURN ZAP 
EXP MIDÉ RIGHTS 

VARIABLES RESERVEES : FALSE PI TRUE 


143 


LA DECOUVERTE DE L'ORIC 


ANNEXE II 


Répertoire des Instructions et des Opérateurs Basic 


Comme le Guide Michelin, nous attribuons des étoiles 
aux instructions et aux commandes : *** instruction fon- 
damentale, ** instruction importante, * instruction 
intéressante. Pas d'* : instruction qu'il ne faut pas 
hésiter à utiliser si le besoin s'en fait sentir ; cer- 
taines de ces instructions ne sont pas traitées dans ce 
livre. 


D'autre part, P veut dire : plutôt instruction en mo- 


de programmé, É veut dire : interdit en mode programmé, 
C : plutôt commande en mode direct, £ : interdit en 
mode direct, "rien" veut dire : tantôt l'un, tantôt 
l'autre. 


La définition est suivie d'exemples non commentés mon- 
trant les différentes formes que peut prendre l'instruc- 
tion. 


Catégorte Mot-clé Définition-exemple 


Fait démarrer l'exécution 
d'un programme en langage 
machine à l'adresse indiquée 
25 CALL 62512 


Dessine un caractère à l'em- 
placement du curseur haute 
résolution CHAR code, jeu, 
allumé 

199 CHAR 65,9,1 


Dessine un cercle centré à 
l'emplacement du curseur : 
CIRCLE rayon, allumé. 

190 CIRCLE 5,1 


Remise à zéro de toutes les 
variables. 










CIRCLE 










Vide l'écran 


Chargement d'un programme 
sur cassette 
CLOAD"" CLOAD"'NOM",S 


Continuer dans le programme 
après interruption. 








144 


Catégorie 


PŒ* 








LA DECOUVERTE DE L'ORIC 


Mot-clé 


CURMOV 


CURSET 


DEF FN 


DEF USR 


ELSE 


END 
EXPLODE 





Définition- exemple 


Déplace le curseur haute 
résolution : CURMOV DX,DY, 
allumé. 

199 CURMOV 19,19 ,0 


Positionne le curseur haute 
résolution : CURSET X,Y 
allumé. 

199 CURSET ÿ,9,1 


Sauvegarde d'un programme sur 
cassette. 

CSAVE"NOM" CSAVE"NOM",S 
CSAVE'"NOM" , AUTO 


Définit une liste de constan- 
tes qui seront "lues" par une 
instruction READ. 

19 DATA ABC, DEF,5,3,25 


Définition d'une fonction uti- 
lisateur. 19 DEF FNF(X)=A*X+B 


Définit l'adresse de la fonc- 
tion USR. 
DEF USRY-4ÿÿ 


Dimensionnement d'un tableau 
(fixe les valeurs maximum des 
indices). 1# DIM A(15),B(3), 
C#(2,5),D(7,6,8) - 2f DIM W(N) 


DOKE a,b écrit la donnée b 
&ans le double octet d'adres- 
ses a (poids faibles) et a+l 
(poids forts) 

DOKE 650,65535 DOKE A,X-4 


Dessine un vecteur à partir 
de la position du curseur 
haute résolution, de compo- 
santes DX,DY : DRAW DX,DY, 
allumé. 





Introduit l'instruction à ef- 
fectuer lorsque la condition 
d'un IF n'est pas setisfaite. 
IF X<f THEN A=B ELSE A=X 


Termine un programme. 


Produit un bruit d'explosion. 


145 


LA DECOUVERTE DE L'ORIC 


Catégorie Mot-clé Définition-exemple Page 


pgx 


Pxx 


Pxx 


kXx 


Px* 


FILL 


FOR 


GET 


GOSUB 


GOTO 


GRAB 


HIMEM 


HIRES 
IF 


FILL NLE,NC,Z remplit NLE 130 
lignes élémentaires sur NC 

cases avec le code Z à partir 

du curseur haute résolution. 

FILL 299,4ÿ,638 


Introduit une boucle : toutes 58 
les instructions comprises en- 
tre FOR I = A TO BSTEP C et le 
NEXT correspondant seront ré- 
pétées pour toutes les valeurs 
de I allant de À à B, C par C: 
19 FOR I=1 TO 14 

59 FOR I=ÿ TO 29ÿ STEP 5 

69 FOR I=N TO S8*N+4 STEP 5 

79 FOR I=5ÿ TO 1 STEP -1 

8ÿ FOR X=1.5 TO 2*PI STEP .1 


Attend un caractère au clavier [106 
19 GET AS$ 


Appel d'un sous-programme 120 
19 GOSUB 1909 

Saut à une autre instruction 24 
19 GOTO 5ÿ 

Récupère pour Basic la zone 108 


mémoire d'écran haute résolu- 
tion. 


Abaisse le sommet de mémoire 
connu de Basic : permet de 
protéger une zone mémoire pour 
un sous-programme en langage 
machine. #IMEM #8009 


Passe en mode haute résolution| 92 


Saut conditionnel, de la for- | 50 
me : IF condition THEN ins- 
truction. Si la condition 
n'est pas satisfaite, on passe 
à la ligne suivante ; si la 
condition est satisfaite, on 
effectue l'instruction qui 
suit THEN. 

IF c THEN GOTO s'élide en 

IF c THEN x ou en IF € GOTO x 
19 IF A>B THEN Y=K 


146 





PT*xxx 


Cxxx 


k%x 


TF* 


k%x 


LA DECOUVERTE DE L'ORIC 


INK 


INPUT 


LIST 


LLIST 
LORES 


LPRINT 
MUSIC 


NEW 
NEXT 


ON 


29 IF A=3 GOTO 1994 
39 IF AS<>"" THEN 59 


Autre forme : IF condition THEN 
il ELSE i2 si la condition est 
satisfaite on effectue il, si- 
non ji2. 

IF A=3 THEN Y-12 ELSE Y=-1ÿ 


Définit la couleur des tracés 
("encre") 
INK & INK 1l+INT(7*RND(1)) 


Acquisition de données au cla- 
vier 

19 INPUT A 

24 INPUT A,B,C$,D 

39 INPUT"'ENTREZ UN NOMBRE";N 


Liste du programme 
LIST LIST 19 LIST-1ÿÿ 
LIST 1ÿ LIST 19-1ÿ9 


Listing sur l'imprimante. 


Passage en mode basse résolu- 
tion. LORES ÿ LORES 1 


Ecriture sur l'imprimante. 


MUSIC NV,OC,NO,V prépare ou 
fait retentir une note sur la 
voix NV, l'octave OC, de hau- 
teur définie par NO et de vo- 
lume V. MUSIC 1,4,10,1ÿ 


Vide la mémoire-programme. 


Fait passer à l'itération sui- 
vante dans un FOR 
NEXT I NEXT J,I NEXT 


ON I GOTO 19,29 ,39 
Si I vaut 1, on va en 19, 
s'il vaut 2, on va en 2ÿ, 
en 39 s'il vaut 3. 


ON I GOSUB 1909 ,1590,2000, 500 
Si I vaut 1, on appelle le 
sous-programme en 1ÿÿ9, 2 en 
1599, 3 en 2999, 5 en 5999 


147 





100 


22,26 


31 


157 


92 


157 
134 


33 
58 


LA DECOUVERTE DE L'ORIC 


* PAPER Définit la couleur du fond 100 
de l'écran ("papier"). 
PAPER 7 PAPER NP(I) 

PATTERN |Définit le motif des poin- 102 


tillés pour les tracés en 
haute résolution. PATTERN M 


PING Fait retentir un "ding" aigu |133 


* PLAY PLAY S,B,E,D exécute les 135 

sons préparés préalablement 

par SOUND ou MUSIC avec la 
combinaison S$S (de Ÿ# à 7) de 

voix musicales, B (de ÿ à 7) 

de voix bruitées, l'envelop- 

pe E (de 1 à 7) et caracté- 
risée par la durée D (de 1 à 

à 32767 en demi-millisecon- 
des). PLAY ?,0,7,1000 


*x* PLOT PLOT X,Y,A$ écrit la chaîne 94 
A$ à partir de la position 
X,Y sur l'écran 
PLOT X,Y,A écrit le caractère 
ou l'attribut de code A 
PLOT 1ÿ,1#,12 PLOT 29,15, 
PLOT 2ÿ, 15, "BONJOUR" 
* POKE POKE a,b écrit la donnée b 65 
à l'adresse a. 
POKE 36879,27 POKE K+1,2-4 
Pour lire en mémoire, voir 





PEEK. 
POP Enlève une adresse de retour 
de la pile. 
x PRINT Imprime un résultat sur 15,27 
l'écran. 


PRINT A 14 PRINT A;B,J 
29 PRINT 2*A+3,B$# 
39 PRINT"LE RESULTAT EST";B; 


PULL Enlève une adresse de boucle 
de la pile. 
P*x READ "Lecture" de données dans 72 
une instruction DATA asso- 
ciée. 


19 READ A 2f READ A,B$,C 


148 


LA 


DECOUVERTE DE L'ORIC 





Catégorie 


xx 


LES 


pxx 


Cxxx 


Mot-clé 


RECALL 


RELEASE 


REM 
REPEAT 


RESTORE 
RETURN 


RUN 


SHOOT 
SOUND 


STEP 


STOP 


STORE 


TEXT 
THEN 


TO 








Définition-exemple Page 
Lecture de données sur cassette|157 
199 RECALL A,"2020",S 

119 RECALL X8,"FICH" 


Fait rendre par Basic l'espace |108 
mémoire de l'écran haute réso- 
lution. Nécessaire pour faire 


HIRES après un GRAB. 
Introduit un commentaire. 


REPEAT instructions 
UNTIL condition 

Fait répéter les instructions 
entre le REPEAT et UNTIL jus- 
qu'à ce que la condition soit 
réalisée. 

REPEAT:GET AS:UNTIL AS=CHRS#(13) 
Revient au début des DATA. 


77 
63 


72 


Retour de sous-programme. 120 


109 RETURN 


Déclenche l'exécution d'un 
programme.  ARUN RUN 599 


Produit un bruit de coup de feul133 


16,34 


SOUND NV,P,V fait retentir un 133 
son par le canal NV (de 1 à 3, 

ou, avec bruit, de 4 à 6), de 
fréquence 629ÿ@ÿ/P, de volume V 

(9 à 15). 

SOUND 1,140 ,14 

Introduit le pas d'incrémenta- 60 
tion dans un FOR. 

Arrête l'exécution d'un pro- 68 
gramme. 

1 STOP 

Stockage d'un tableau de don- 157 
nées sur cassette 

199 STORE A,"Z020",S 

Passe en mode TEXT 92 
Introduit l'instruction à ef- 50 
fectuer quand un IF est satis- 
fait. 

Introduit la valeur limite d'un| 58 


FOR. 


149 


LA DECOUVERTE DE L'ORIC 





Catégorie | Mot-clé Définition-eremple 


Arrête la trace. | 69 


Met en oeuvre la trace (liste 69 
des n° d'instructions par où 
l'on passe). 


Introduit la condition d'arrêt 
d'une boucle REPEAT. 


WAIT N fait attendre N cen- 
tièmes de seconde. 


Produit un bruit de tir d'un 
canon laser. 


Affectation de valeur à une 
variable. 4-86 


Dénote une constante hexa- 
décimale ?DEEK (#CY09).- 






















addition de nombres ou non logique, agit 
concaténation de chaînes sur l seul opérande 
de caractères |----+- 


- prendre l'opposé ou 
soustraction {À 1 
multiplication 
division 


de relation 





égal différent 
< inférieur > supérieur 
<= inf.ou- >= sup. ou = 


=< inf.ou= => sup. ou = 


bit | NOT | 
9 1 
L ) 














150 


LA DECOUVERTE DE L'ORIC 


ANNEXE III 


MESSAGES D'ERREUR 


Le fait de disposer d'un interpréteur qui prend les 
instructions Basic une par une pour les exécuter permet, 
lorsque se produit une erreur, d'identifier, avec pré- 
cision, l'instruction où s'est produit l'incident. 


Par suite, les messages d'erreur seront de la forme : 


? message FRROR in numéro 

précisant le numéro de la ligne où l'erreur a été ren- 
contrée. Le seul cas où le numéro n'est pas précisé est 
celui d'une commande directe. 

Les problèmes les plus courants proviennent d'un mot- 
clé mal orthographié, d'une virgule manquante ou d'une 
variable d'un certain type employée à tort, etc... 

Il faut noter qu'une erreur signalée à un numéro de 
ligne peut n'être que la conséquence d'une autre erreur : 
par exemple une DIVISION BY ZERO ERROR vient plutôt des 
instructions précédentes où le diviseur est calculé. 


Nous donnons, ci-dessous, la traduction, et pour les 
plus importants, des explications, des différents mes- 
sages d'erreur qui peuvent être délivrés par l'ORIC 
lors de l'exécution d'un programme Basic. 


BAD SUBSCRIPT (mauvais indice) 

Tentative d'appeler un élément de tableau d'indice supé- 
rieur à la limite fournie dans le DIM, ou encore avec 

un nombre d'indices différent de celui spécifié dans le 
DIM. 

Exemple : DIM A(15) avec A(29) ou A(2,2). 


BAD UNTIL (mauvais UNTIL) 
UNTIL rencontré alors qu'il n'y a pas eu de REPEAT. 


CAN'T CONTINUE (on ne peut pas continuer) 
Impossibilité de reprendre l'exécution d'un programme 
par CONT. C'est le cas s'il y a eu une erreur, ou si, 
pendant l'interruption, on a modifié ou ajouté une 
instruction. On peut reprendre par GOTO numéro dans 
certains cas. 


DISP TYPE MISMATCH (Désaccord avec le mode d'affichage) 
Emploi d'une instruction caractéristique d'un mode d'af- 
fichage alors qu'on est dans un autre. 

Exemple : DRAW alors qu'on est en mode TEXT. 


151 


LA DECOUVERTE DE L'ORIC 


DIVISION BY ZERO (Division par zéro) 
Vient le plus souvent d'une variable non initialisée. 


FORMULA TOO COMPLEX (Expression chaîne de caractères 
trop complexe ou trop de IF...THEN sur une ligne). 


ILLEGAL DIRECT (illégal en mode direct) 
INPUT, GET et DEF FN sont interdites en mode direct. 


ILLEGAL QUANTITY (valeur erronée) 
Emploi d'une fonction avec un argument hors de l'inter- 
valle permis. Exemples 
- indice négatif ou >32767 
- argument de LOG négatif ou nul 
- argument de SQOR négatif 
- ÿ puissance nombre négatif 
- longueur spécifiée dans MID$, RIGHTS, LEFT$ non 
comprise entre ÿ et 255 
- index de ON GOTO hors des limites 
- adresses dans PEEK, POKE, DEEK ou DOKE non comprises 
entre ÿ et 65535 
- octet spécifié dans POKE, TAB, ou SPC non compris 
entre ÿ et 255. 


NEXT WITHOUT FOR (NEXT sans FOR correspondant) 

Vient le plus souvent de boucles mal imbriquées, d'une 
confusion sur la variable marquée dans le NEXT ou encore 
si l'on a supprimé un FOR pour une correction, en ou- 
bliant de supprimer le NEXT. 


OUT OF DATA (DATA épuisées) 

On essaie de faire un READ alors que l'on a déjà "lu" 
toutes les données de toutes les DATA. Il faut, soit 
comptabiliser les données avec soin, soit utiliser 
RESTORE. 


OUT OF MEMORY (mémoire épuisée) 
Programme trop long, ou trop de variables, ou trop de 
boucles et GOSUB imbriqués. 


OVERFLOW (Dépassement de capacité) 

Résultat d'un calcul supérieur à 1.7E38. Dans l'autre 
sens, un résultat inférieur à 2.9E-39 est indiscernable 
de ÿ, mais il n'y a pas de message d'erreur. 


152 


LA DECOUVERTE DE L'ORIC 


REDIM'D ARRAY (Tableau redimensionné) 

On est repassé une deuxième fois sur l'instruction DIM 
portant sur un tableau, ou il y a une deuxième instruc- 
tion DIM pour un tableau. 


REDO FROM START (Recommencez depuis le début) 
Lors d'une instruction INPUT, on a fourni une quantité 
alphanumérique, alors que l'on s'attendait à du numéri- 
que. Il faut reprendre en redonnant toutes les valeurs 
attendues par l'instruction INPUT considérée. 


RETURN WITHOUT GOSUB (Retour sans GOSUB) 

On est tombé sur un RETURN alors que l'on ne venait pas 
d'exécuter un GOSUB. Dû le plus souvent à l'oubli de 
END en fin de programme principal qui précède un sous- 
programme. 


STRING TOO LONG (Chaîne de caractères trop longue) 
Tentative de créer (par concaténation) une chaîne de 
plus de 255 caractères. 


SYNTAX (Erreur de syntaxe) 

Instruction incompréhensible pour Basic. Dû notamment à 

des parenthèses non appariées, caractères illégaux, mau- 
vaise ponctuation, faute d'orthographe dans un mot-clé. 


TYPE MISMATCH (Désaccord entre numérique et alphanumé- 
rique) 

Valeur numérique affectée à une variable chaîne, ou vice- 
versa, ou bien argument numérique fourni à une fonction 
qui demande un argument alphanumérique, ou vice-versa. 


UNDEF'D STATEMENT (Instruction non définie) 

GOTO, GOSUB ou THEN renvoyant à un numéro de ligne in- 
existant. C'est le plus souvent dû à l'oubli de correc- 
tion d'un GOTO... quand la ligne cible a été supprimée 
ou changée de place. 


UNDEF'D FUNCTION (Fonction non définie) 
Référence à une fonction pour laquelle on a oublié le 
DEF FN. 


L'erreur FILE ERROR LOAD ABORTED à été traitée au cha- 
pitre III dans la section sur les cassettes. 


153 


LA DECOUVERTE DE L'ORIC 


ANNEXE IV 


QUESTIONS ET REPONSES 


Lorsque je veux relancer un programme après interrup- 
tion (en 1##), je peux utiliser CONT,RUN 1#ÿ ou GOTO 
199 (en mode direct). Quelle est la différence ? 





CONT ne peut pas être utilisé sit, au cours de l'interruption, vous 
avez apporté une correction au programme. Si vous utilisez RUN 194, 
toutes vos variables seront remises à zéro. Donc, sit lors de 
l'interruption, vous avez corrigé une vartable, il faut utiliser 
GOTO 1ÿ94. 


Lorsque la variable à lire par INPUT est une chaîne de 
caractères, doit-on la mettre entre guillemets ? 


En principe non. On la met entre guillemets si la chaîne contient 
des virgules, deux-points, ou des espaces au début ou à la fin. 


jee se passe-t-il lorsqu'en INPUT d'un nombre on four- 
nit une chaîne de caractères, ou vice-versa ? 


Si à INPUT A$ vous répondez 123, l'ORIC prendra la chaîne de carac- 
tères chiffre 1, chiffre 2, chiffre 3 ; pas de problème. 


Si à INPUT A vous répondez ABC, il y aura une erreur avec le mes- 
sage REDO FROM START et l'instruction INPUT sera réexécutée ; donc, 
pour un INPUT à plusieurs variables, vous devez refournir toutes 
les données. 


Y-a-t'il une limite à la longueur des chaînes de 
caractères ? 


Out : 255 caractères, ce qui est déjà beaucoup. Notez qu'une telle 
chaîne ne peut pas être donnée d'un seul coup, puisqu'une instruc- 
tion ne peut dépasser 89 caractères ; elle doit être construite 
par concaténation. 


| Comment prévoir la taille d'un programme ? 


En gros, un programme occupe autant d'octets qu'il renferme de 
caractères, puisqu'il est stocké tel quel, comme chaîne de carac- 
tères, sauf les mots-clés qui sont remplacés par un code en 1 octet. 


En ce qui concerne les variables, chaque variable numérique occupe 
7 octets, chaque chaîne occupe (7 + longueur) octets. Un tableau 
occupe x (n+1)+8d, où d est le nombre de dimensions, n est la 
taille du tableau (y compris l'élément n° #) et x = 5 (nombres) 

ou 3 (chaînes de caractères). 


154 


LA DECOUVERTE DE L'ORIC 


On gagne de la place mémoire en supprimant tous les blancs inuti- 
les, en mettant plusieurs instructions par ligne, en évitant les 
REM, en utilisant des variables plutôt que des constantes. 
Utilisez des GOSUB dès qu'il faut faire appel plusieurs fois à 
une séquence d'instructions identiques. 


J'ai des problèmes lorsque j'ai plusieurs instructions 
sur la même ligne, avec un IF parmi elles. 


La forme : 19 inst.1l : int.2 : IF c THEN inst.3 

29 inst.4 
ne doit vous causer aucun problème. Elle obéit à l'ordinogramme 
a) ci-dessous : 


La forme 

5 inst.1l 

19 IF c THEN inst.2 : inst.3 
29 inst.4 

obéit, sur L'ORIC, à l'ordino- 
gramme b) ci-contre. C'est-à- 
dire que lorsque la condition 
n'est pas satisfaite, on passe 
à La ligne suivante et non à 
l'instruction qui suit l'ins- 
truction introduite par THEN. 





Que se passe-t-il si je mets une instruction FOR sans 
NEXT ? 


Les instructions qui suivent le FOR sont exécutées une fois (puis- 
que rien ne dit à L1'ORIC qu'il faut recommencer). La variable, 
citée dans le FOR, prend pour valeur la valeur de départ (placée 
avant TO). 


[Comment imprimer des nombres alignés sur leur droite ? 


Il faut employer les fonctions chaînes de caractères. Par exemple, 
on dispose d'une zone de 10 caractères dans laquelle on veut im- 
primer un nombre N. Quel que soit le nombre de chiffres, on veut 
que le nombre soit imprimé à droite de la zone. On emploie la 
séquence suivante : 

199 N8=STR$(N) :L=LEN(NS) 

119 IF L=1ÿ GOTO 13ÿ 

129 FOR I=1 TO 1Y-L:N$=" "+4N$ :NEXT 

139 PRINT N$ 


On peut remplacer 12ÿ par 12ÿ PRINT SPC(1ÿ-L) ; 


155 


LA DECOUVERTE DE L'ORIC 


Je viens de faire un programme que je voudrais sauve- 
garder sur cassette, mais j'ai oublié de positionner 
la cassette. 


Il ne faudrait surtout pas faire le SAVE avec la cassette rebobi- 
née : vous effacertez une partie des programmes déjà enregistrés. 
St votre magnéto a un compteur et si vous avez noté les numéros, 
vous pouvez vous positionner derrière le dernier programme qui 
avait été enregistré sur la cassette. Sinon, prenez une autre 
cassette. 


I Comment savoir ce qu'il y a sur une cassette ? 


Il faut tenir un répertoire des cassettes à mesure qu'on les rem- 
plit. Sinon, lire chaque programme par CLOAD"'" (sans préciser Le 
nom) . 


J'ai vu, sur certains listings, des noms de variables 
se terminant par %. Qu'est-ce que c'est ? 


IL s'agit d'un type de variable que nous n'avons pas étudié : les 
vartables entières. Leurs noms sont de la forme A% A1% ALBERTY. 

On peut, dans un programme, avoir les trois variables distinctes 
A% A et A#. Les variables % peuvent être dimensionnées. 

Ces vartables ne peuvent prendre que des valeurs entières comprises 
entre -32767 et +32767. Elles sont intéressantes pour économiser 
de la mémoire, étant donné qu'elles n'occupent que deux octets. 


Est-ce que, à part des programmes, on peut écrire des 
données sur cassette ? 


Oui, mais le Basic de l'ORIC n'offre aucune facilité pour cela. 
Il faut recourir à des techniques délicates qui seront décrites 
dans le prochain livre de cette série, sur les périphériques et 
fichiers. Il y aura aussi des articles sur cette question dans 
"La Commode". 


Le programme suivant est le squelette d'une gestion de fichiers 
sur cassette. Lorsqu'on fait RUN (le magnéto étant en écriture), 
on acquiert au clavier des chaînes de caractères qu'on transfère 
sur cassette. On termine en fournissant 888 comme chaîne. 
Lorsqu'on fait RUN 49, les données sont relues et imprimées sur 
l'écran. 


LA IHPEUT A% 

A GOSUB 1846: GOSUR 1A5A 

BU IF A$<2"#$#$" COTO 1 

35 END 

HA GÜSUB LAS: GOSUB 1964 

Es As" ":H=ltzd 

EQ BeFEEKS AGIT Be GOTO GA 

FA OABSAEHCHRES E 1: Hal: GÜTO 64 





156 


LA DECOUVERTE DE L'ORIC 


SE PRINT AS:IF Hi: "SE" LUITO 4 

a ENC 

LH LLeLENE AS + FOR Lei TO LL-1 

POKE LAZEAT. ASC MTDSE A8, 1, 1 2) NEXT: POKE 1AEZ34+LL. à 
CÛKE #5F. #44: POKE #61:LL:POKE #62, 4 

DOKE H#ES, : se, El 

COKE # : 

ALL # 















ALL AEGA : RETURN 


Pour l'utilisation de ce programme, il est préférable de disposer 
de la télécommande du magnéto. Cette procédure est inutile avec 
L'ORIC ATMOS qui dispose d'instructions spéciales pour cela : 
STORE V,'"'NOM"[,S] range le tableau V dans le fichier NOM sur cas- 
sette 

RECALL V,"NOM"[,S] récupère dans le tableau V les données du fi- 
chier NOM. 


J'ai une imprimante. Comment l'utiliser ? 
1°) Pour obtenir un listing sur l'imprimante, faire LLIST. 


2°) Pour écrire sur l'imprimante, faire LPRINT en lieu et place 
de PRINT. 


Selon l'imprimante, des LPRINT CHR$(x) peuvent avec certaines va- 
leurs de x envoyer des caractères de contrôle déclenchant un com- 
portement spécial de l'imprimante, comme saut de page, impression 
en caractères larges etc... Reportez-vous à la notice de 
l'imprimante. L'imprimante vous fait des problèmes du style 
caractères répétés ou manquants, voyez dans "La Commode" n° 9, 
page 60, une explication possible et le remède correspondant qui 
est d'interdire les interruptions le temps de l'impression : 
CALL# EDQ1:LPRINT.....:CALL # ECC7. 


15,7 


LA DECOUVERTE DE L'ORIC 


ANNEXE V 
SOLUTIONS DES EXERCICES 


Les exercices non rappelés ici ont, en principe, leur 
solution dans le texte. 


Exercice 2.1 


19 INPUT'RAYON'" ,HAUTEUR':;R,H 

29 V=PI*Rt2*H 

39 PRINT''VOLUME=" ,V 

4ÿ GOTO1ÿ 

199 REM 29 ET 39 POURRAIENT ETRE REMPLACES 
119 REM PAR 25 PRINT'VOLUME=",PI*Rt2*H 


Exercice 2.2 


IHPUT"CAFITAL. TAUX EN MHOMÈRE D'ANMNEES"3 CA TAN 
IsC#E SAT OC tN-1 
FRINT'INTEFET=";1I 


GT 


ù D 


4H Libye 
Li 


Exercice 3.2 
Appuyez sur 'Del' deux fois, puis JOUR. 


Exercice 3.3 


Taper : BONJOUR ‘'Esc'L 'Esc'G 'Esc'P MADAME 'Esc'W 
"Esc'D "Esc'H BONJOUR ‘Esc'L 'Esc'C 'Esc'T MONSIEUR 


Exercice 3.5 


Pour que l'instruction 3# passe de 39 PRINT'SURFACE =", 
S à 39 PRINT'VOLUME =",V; amener le curseur sur le S 
de surface par ‘'Ctrl' A et taper VOLUME=",V 'Return'. 


158 


LA DECOUVERTE DE L'ORIC 


Exercice 4.1 


15 IF S<=ÿ GOTO 1ÿ 

Variante : 15 IF S<=ÿ GOTO 5 
59 PRINT'IL FAUT UNE SURFACE POSITIVE" 
69 GOTO 19 


Exercice 4.2 





Imprimer "Rayon du cercle" 
Lire R au clavier 


Calculer S =MR?2 
Imprimer "Surface =" et S 







Imprimer "Surface du cercle" 
Lire S au clavier 










Imprimer "il 
faut une surface 
positive" 









Oui 
Calculer R VS 
LÉ 

Imprimer "Rayon", R 





159 


LA DECOUVERTE DE L'ORIC 


Exercice 4.3 


DU | calcul, INPUT (pour lequel on emploie parfois 


) ou PRINT (pour lequel on emploie parfois 


<< IF 
GOTO ou IF 


END ou dernière instruction 


dans la commande RUN ou GOTO en mode 


———— 
Q Première instruction, ou numéro cité 
direct. 


Exercice 4.4 
PRINT INT(X*1#tD)/19tD 


Exercice 4.5 


Deux solutions 

1. faire l'impression en 65 et mettre 6% N=N+1 

2. initialiser N à 1, ce qui doit se faire explicitement 
en ajoutant 19 N=1. 

Exercice 4.7 


Il manque l'impression d'une première ligne de titre ! 
5 PRINT'NB","CARRE" ,"RACINE" 
6 PRINT 

(Le 6 fait sauter une ligne). 

Exercice 4.8 

Seule instruction changée 
19 FOR N=2 TO 1ÿ STEP 2 

Exercice 4.9 


19 : 1 3 5 7 valeur finale 9 
59 : 19 9 8 7 6 5 4 valeur finale 3 


Exercice 4.11 


2 minutes : on accorde 729ÿ soixantièmes de seconde. 


160 


LA DECOUVERTE DE L'ORIC 


Exercice 4.12 












Initialiser Temps 
Initialiser N à 1 


Temps dépassé 


Acquérir le nombre 


Erreur< tolérance 


Augmenter N de 1 


Limite dépassée 






Imprimer 
Imprimer "perdu" 
Mgagne" 


Exercice 4.13 


Problème déjà résolu dans l'instruction 49 : 
69 PRINT'GAGNE EN'";N; "COUPS ET'":INT((65535-DEEK(63@)).6) 
/199 "SECONDES" 


161 


LA DECOUVERTE DE L'ORIC 


Exercice 4.14 


15 IF 65535-DEEK(63@)>72@ÿ GOTO 55 

59 PRINT'NB. D'ESSAIS PERMIS DEPASSE" 
53 END 

55 PRINT'"'TEMPS DEPASSE" 

57 END 


Exercice 5.1 
ES IF CS533333 GÜTU 
Zr RESTÜRE :GOTÜ SG 
18€ GÜTO 14 
Z1G DATA 210,75.51,991.5:31,4.18,2.7,932339 


a 


[e] 


Exercice 5.2 


À la suite du calcul de la moyenne, on aurait 


5-2 4 
Fù = 
io FOR 1=1 TO N 
11 Vu #{ACI2-HD T2 
120 HENT 1 


159 Ya 'iN-13 


On peut proposer une solution plus élégante, qui calcule 
moyenne et variance dans la même boucle, et qui repose 
sur la remarque mathématique suivante 


a» 2 _2 2 _ 2 
(A; M) * (A; 2MA; + M) 


A.2-2M? + NxM2 
i i 


FM M 


A.,2-NxM? 
1 


162 


LA DECOUVERTE DE L'ORIC 


D'où le programme 
5-2 B 


14 DIf AN) 

2G REM LECTURE DES À 

sa 5=t: 52=<6 

4 FOR 1=1 TO NH 

SE S=S+ACID: SEESEÉ+AS ID TE 

&4 MEXT I 

FE MESCHINSCSE-HHNM TE DEN 1 0 
FRINT'MOTENHE "M, "VARIANCE "3% 


Dal 


S 


Exercice 5.3 


1G@ DIN UCHD, YEN 

ZA REN LECTURE 

Sa Ut 

4 FÜR 1<1 TO H 
Sa UVEUVÆHUETIÆMET 
ä HEËT I 


LL 


Exercice 5.5 


1 RE OM HE S'OCCUFE FOS DU TOUT 
15 REï DES ENTRÉES SORTIES 

ZE DIN ACMAMIS ECM HS CEHS NE 

SG FÜR I=1 TÜ H 

40 FÜR J=i T0 H 

sa Cil.J:=E 

Sà FÜR K=1 TO H 

TE CÉIATD=CÉIS T+ACIKHEHELCK, JE 

Ga MEXT K'HEZT J'HEZXT I 





Exercice 5.6 
19 XS=LEFT£#(XS, 4)+'"A"+MIDÉ(XS,6) 


163 


LA DECOUVERTE DE L'ORIC 


Exercice 5.7 
1GQ H=LENCAS)D :F=LENCES) 
11G FÜR K=1 TO H-F-1 
120 IF MIDECRF.Kr2=E$ GÜTO 155 
1356 HEËT KE 
146 H=û 
15€ FRIHT K 
16G END 


Lorsque vous aurez vu les sous-programmes, vous compren- 


drez qu'il est très judicieux de remplacer 16ÿ par 
169 RETURN. 


Exercice 5.8 


NC = LEN(STRS(A))-1 dans les deux cas : STR$ est corri- 
gée pour cela dans l'ORIC. 


Exercice 5.9 


199 B$-STR$(B):N=-LEN(B£) 
119 PRINT LEFTS(B$,N-3) 


Exercice 5.10 


On suppose au départ 
que le maximum est au 
rang 1. 


Ensuite, on parcourt 

le tableau SM à partir 
du rang 2. Si on trouve 
un élément supérieur au 
maximum supposé, c'est 
cet élément que l'on 
prend comme nouveau 
maximum supposé 





164 


LA DECOUVERTE DE L'ORIC 


On peut alors ajouter au programme B-10 la séquence 
suivante : 


=16 AA RES SIP E 

ZE FÜR Ji TO HI:ESNCIi=t 

ESa FÜR F=i Ta HP ESMETDSUMETS HEC FE 
244 HEST F:SMETIESMETICMNPIMERT J 

ESo Ji=l:r Ci 

z6ù FÜR J=X TO HI 
T& IF SiiJo<ieN THEN E3G 
Er JMEJT MEL TS 

G HEXT J 
(s) 
ü 









FRINT'LE GAGHANT EST  ":HGEE TM 


3 
50 
16 FRINT'AVEC UN SCORE MOTEN DE": 


Uù CG) [ei 


Exercice 5.11 


Les problèmes de classement ou de tri sont parmi les 
plus souvent rencontrés. On distingue les problèmes de 
tri simple où, partant d'un tableau d'éléments, on 
cherche à obtenir, à la fin du programme, le même tableau, 
mais ordonné, les éléments étant maintenant croissants 
ou décroissants ; et les problèmes de classement où on 
laisse en place les éléments du tableau de départ, mais 
on forme un tableau auxiliaire, dit tableau de pointeurs 

O(I), tel que PO(I) soit l'indice dans le tableau de 
départ de l'élément qui mérite d'être classé I ième. Le 
nom du joueur classé I ième est ainsi NOM$ (PO(I)). 


Dès que les éléments sont encombrants, il est plus inté- 
ressant d'effectuer un classement, plutôt qu'un tri sim- 
ple : les termes à déplacer sont plus petits. 


Une méthode de classement simple découle de l'exercice 
précédent. Supposons qu'on veuille un classement par 
ordre de score moyen décroissant. PO(1) n'est rien d'au- 
tre que le JM obtenu précédemment. PO(2) n'est autre 

que le rang du maximum suivant et ainsi de suite. Mais 
il y a un problème. 


Lorsqu'on cherche le maximum d'un certain rang, il ne 
faut pas reprendre un maximum obtenu précédemment. 
Donc, lorsqu'on trouve un maximum, il faut remplacer 
l'élément par une valeur inférieure à toute valeur pos- 
sible (ici -1) pour que l'élément ne soit plus repris. 
Dans ce cas, le tableau SM sera détruit par le classe- 
ment. Pour l'éviter, on recopie d'abord le tableau SN 
sur lequel on travaillera. 


165 


LA DECOUVERTE DE L'ORIC 


D'où l'ordinogramme 
ci-contre qui n'est 
que la répétition 
de celui de 5.10 
pour chaque valeur 
de K. 





Recopie du tableau 
SM dans SN 





K représente le 
rang, à un instant 
donné, dans le 
classement. 





PO(K)=JM 
SN(JM)=-1 





25a LI SNÇCNJD, POCHID 

268 FOR J=1 TO HJ:35:4CJ3=CM<JD:HEXT 
2r& FOR K=1 TO NHJ 

2860@ JM=1:M=SHCJM) 

236 FOR J=2 TO NJ 

SGQ IF SNÇJ>D<=M THEN 526 

S16 JM=J:M-SNCJ) 


S2G HEXT J 

SSG FOCKI=JM: SNCIM2=-1 

S+ü NEXT K 

35 FRINT'CLASSENENT: PRINT 

Séeë PRINT"'RAHG", "JIOLEUR", "SCORE MOTTE" :FRINT 
Sr FÜR I=1 TÜ HJ 

SSE FRINT I,HOMECPOCIDD, SMÉPÜCIDD: NEXT I 


166 


LA DECOUVERTE DE L'ORIC 


Il existe d'autres méthodes de tri. Une des plus connues 
s'appelle méthode du "tri à bulles". On parcourt le ta- 
bleau à classer en comparant à chaque fois deux éléments 
consécutifs. S'ils sont dans le bon sens, on les laisse ; 
s'ils sont dans le mauvais ordre, on les échange. 


Si, lors d'un parcours, il y a eu au moins un échange, 
on fait un nouveau parcours. S'il n'y a eu aucun échange, 
c'est que, maintenant, le tableau est ordonné. 


Les méthodes de classement s'appliquent au classement 
alphabétique des chaînes de caractères, puisque IF Af<B$ 
est vrai si A$ précède B$. La séquence suivante classe 
par ordre alphabétique le tableau des noms NOM$ 


UE 

ECH=G:RENM  INDICATEUR D'ECAAbGE 

Es I1=i TG NJ-1 

1F NOMESIIIEMNOMECI +15 The 458 
TENUE I+10  REM SAUVEGARIIE FOUR ECHANGE 
NGNMECI+12=HOMECI D MHOMECIH=TE: ECH=i 

MENT I 

ir ECH=i DIT 45 

PHLHT.:PRINT'COLASSEMENT ALPHRBETIRUE" 

FOR Izi TU MS CPRINT NGME#SIS:HEXT I 


DUT 


Hi D N HE Hi 4e R D Hi Li 
D 1 C1 à D hi 
© © © & © À & GR 


Exercice 6.2 


Deux problèmes se posent : le premier est celui de 
l'échelle ; les effectifs sont tous assez voisins (de 
89 à 129), donc il faut dilater les différences, mais 
tout de même garder un certain terme constant. 

Comme le numéro de la classe et l'effectif sont ins- 
crits en tête de ligne, l'écriture commence en colonne 
11. Il faut utiliser des manipulations de chaînes de 
caractères pour assurer une largeur constante aux im- 
pressions du numéro de classe et de l'effectif. 


Nous proposons la formule de réduction d'échelle : N= 
(C(I)-79) qui fait varier N de ÿ à 25. 


D'où la fin du programme 


NI 


Exercice 6.2 


34 PRINT "CL EFF" 
188 FOR Lei TO LG HeINTÉÉOI I er 





su 
CE 





118 FRINT RIGHTS" MaSTRSE 1835" PiRIGHT#E "À LE 
LE Luis di 

126 FOR Kel TO HIPRINT MES: HET K 

LES FRINT:NEXT I 


167 


LA DECOUVERTE DE L'ORIC 


Exercice 6.3 


SIT CENTRES 8, 0 0 RAC CF 









STEF SXPI-E0@ 


Exercice 6.4 
PLOT 14,13,CHR$(12)+CHR$(4)+CHR£#(21)+"BONJOUR"+CHRS£ (23) 
clignotement 
caractères bleus retour au fond blanc 
fond pourpre 


Chaque attribut occupant une position, il faut commen- 
cer en colonne 14 pour que "bonjour" soit au milieu. Le 
CHR$(23) final fait revenir au fond blanc sinon le fond 
serait resté pourpre jusqu'à la fin de la ligne. 


Exercice 6.5 


PLOT 1,19,'"BONJOUR'"+CHRS(12)+CHR$(7)+CHR$S(16)+"MADAME"+ 
CHRS(23)+ CHR£(4) 

PLOT 19,19 ,CHR$(8)+"BONJOUR'"'+CHRS(12)+CHRS#S(3)+CHRS# (29) 

+ "MONSIEUR" 

(On ne peut pas mettre tout en une seule ligne Basic). 


Exercice 6.6 
PLOT 17,13,2#:PLOT 18,13,23:PLOT 19,13,17:PLOT 29,13,23 


Exercice 6.7 


19 CLS:PRINT CHR$(17) 

29 FOR 1=-489ÿ@ÿ@ TO 4912ÿ STEP 4@:POKE I,1#:NEXT 
39 FOR 1=-48#14 TO 4912ÿ STEP 4ÿW:POKE I,23:NEXT 
49 FOR 1-48#28 TO 49129 STEP 4#:POKE I,17:NEXT 
59 GOTO 5ÿ 


Au lieu de 5ÿ, on pourrait faire retentir la Marseil- 
laise, ce que nous saurons bientôt faire. 


Le PRINT CHR$(17) en 19 n'est qu'un 'Ctrl' Q pour empê- 
cher d'avoir le curseur. 


168 


LA DECOUVERTE DE L'ORIC 


Exercice 6.8 


I1 suffit d'ajouter les instructions 


SÛUIDE" 
LELECURSET Ke 
t fæel TO LENCO 
SEC MIDSE AS, IT, 120 
LS CHAR M, 6 1 
TOET EHEET Gi 










LS 


Exercice 6.9 


PROGRAMME C5 
TELECRAH 


14 HIRES:PRINT" TELECRAN"CHRSE 1 2 

2Q xe@:Y=D:CURGSET #1 

34 A=PEEKS 80 1: BePEEKE SEL OIIF 4eSé GOTO SË 

4G IF A=188 THEM Ikel :lvei :GOTO 118 

SA IF A=196 THEN Ixs@ : le]: GOTO 118 

SA IF A=172 THEM Jée-l:l#eg :GOTO 114 

FG IF A=18Q THEM Ixeû : lei :GOTO 116 

80 IF A=132 THEN 14 

39 IF A=173 THEN CURSET &,%, 6 :GOTO 4 

184 GOTO SA 

119 Léeé Lt 24119, 58: rec Ti ES SCIE Ckelka OR Cali 
GITE A 


124 IF Beiéé GOTO 148 

134 CURSET #1, 1, @ 

14 Ke TH Men CLIRGET Le GOTO 
LAB FRINTPEEKS 820 5: COTON GA 


L'impression de CHR$(17) en 1# supprime le curseur. 
Lorsque vous arrêtez de jouer par 'Ctrl' G, faites 
iCtrl' Q pour le rétablir. La ligne 11f# assure qu'on ne 
sorte pas des limites de l'écran. 


Par suite de l'effet de répétition des touches si vous 
voulez tracer un pointillé, vous ne pouvez pas mainte- 
nir l'appui sur la touche curseur et appuyer le doigt 
sur 'Ctrl' de façon intermittente : il faut aussi lever 
le doigt de la touche curseur. 





Nous vous suggérons d'ajouter des touches pour faire 
les mouvements diagonaux. 


Exercice 6.10 


99 PRINT'ON RECOMMENCE(O/N)?" 
91 GET A$ 

92 IF A$="O" GOTO 1ÿ 

93 IF A$="N" THEN END 

94 GOTO 91 


169 


LA DECOUVERTE DE L'ORIC 


Exercice 6.11 


Trois solutions : 


L= 199 GET A$ 

... suite ... 
2- 199 AS=KEYS:IF Af$=""GOTO 1#9ÿ 
3- 199 IF PEEK(52#)=56 GOTO 199 


Exercice 7.1 
Les seules instructions modifiées sont : 


19 PRINT" ";CHR$#(27);"I éa 
29 PRINT" M: CHR$#(27) "UT TT 
39 G=471#4:R=ASC('"*x") 


Le couple CHR$#(27)(Escape)I fournit l'attribut 9. Les 
deux espaces en tête garantissent qu'il ne vienne pas 
effacer les attributs standard en tête de ligne. 


Exercice 7.2 
11 suffit d'ajouter 
5 CLS:?7:7:7:?7:2:7?:?CHR$S( 
145 GOTO 145 
On sort du programme par 'Ctrl'C et on rétablit le cur- 
seur par ‘'Ctrl' Q. 


Exercice 7.3 


I1 suffit d'ajouter un caractère plein en remplacement 
de K et OU] en remplacement de L d'où le programme : 


5 CLS:PRINT:PRINT:PRINT:PRINT:FRINT:FRINT:PRINT CHR 170 





18 PRINT" CODDKCO" 
2@ PRINT" « E 
3@ PRINT" 

49 PRINT" 

sa PRINT" F ACB GGÈE”" 
68 PRINT" FE F CGEE" 
7@ PRINT" FE F CCLE" 
8a PRINT" JCICMCOOCI" 
90 G=47104 


190 FOR R=635 TO 76 
119 FOR LæeQ TO 7 
129 RERD X:POKE G+S%kR+L x 

190 NEXT L:HEXT R 

14@ FOR I1=Q TO 26:PLOT GI,R HET 
145 GOTO145 

150 DATA 1,2,2Z,4,8,16,16 
160 DATR 63.0.@.@.0,0,@, 


32,3% 
-8:@: a, CR 


EE 










179 DATA 82,32:52.32,38.3 dañatutsdrtot:t 
18Q DATA 63,32,32,3£,32.3 Hall tsdid1l 
190 DATA 32,32:92,32,92,2 +l:1:1:1:1.:1,63 
208 DATA 63,63.635.63,6S.65. -4.4.9.8.%.4.@ 


LA DECOUVERTE DE L'ORIC 


# 


La photo ci-contre I El 


donne l'aspect de 
l'écran obtenu. 


Exercice 7.4 


On utilise les remplacements des caractères de 'r' à 

‘z' mais dans le générateur standard, sinon l'écran se- 

rait troublé. Il n'y a donc pas d'attribut 9 à mettre. 
RENM 

2G1A DATA Rebehet, MRCTE  O EC TT 

2QZA DATA mans, 14! RES T " 

2200 GedéASB: FOR Bell TO LEE 

sein FEAT AS:FOR Leÿ TO F 

2220 AeASC MID AS, L+1, 12-32 

SESG FOKE GHBÆR4L, A: MERTHEXT 

2900 CLS: PRINT: PRINT :PRINT: PRINT 

ESA FRINT" r" 

2384 FRIHT" st" 

2334 FRIHT" uw" 

padà FRIHT" ue" 

2358 PRINT" #2" 








Exercice 7.5 


14 GOSUESAQ :CLE 
BA el Vel: PLOT 
Sa PLÜT 4. 
4€ 
Sa 
14 
FE 
A) 
ELA ; 
TA) SE: ReASCE CES 

sig FOR Lef TO 7:READ & 

Sen POKE GHSER dl He MERT 

“aû RETURN 

48 DATA SU, 6. 68.64.65, 30,4 









171 


LA DECOUVERTE DE L'ORIC 


Exercice 7.6 


14 GOSUBSAQ: COLE 
LA H=2@: Vel: PLOT KT, "Ho: Det 

3a PLOT #44 ge: el FLOT or UE 
4@ WUAIT D:IF v<zé GOTO SA 

sa PLOT otage are): PLOT tr 
6 WAIT D: IF “ri GOTO SA 

Fa GOT 34 

SA Gedé a : Re EN 

Si FOR Leñ TO F:RE 
SA POKE GHEÆRL 4 
sa RETURM 

dû DATA 30 ES, 6 









Exercice 7.7 
13 _ Has CLS 









20 Hal: V#l'PLOT #,v, "#4" Dé 

26 PLOT Hi, 32: vav+l Ha+l:PLOT Ho "x" 
4@ UAIT D: 5 GOTO 

S@ PLOT KV, BE: Ver l : SPRL 





Û 
sa HAIT DIE el GOTO SEA 
FE si 
mA SAIS E : ReAECE HN 
si FOR Le TO Fi aus “# 
SpA POKE GER EL 86: MEXT 
534 RETURH 
da CATA M, 38, 68 68, 6 ÉCAR, 4O, 





Exercice 7.8 


Si k»>32, on a déjà £1=-k et £2=k+64. 
k'=63-Kk est un attribut. Le dessin complémentaire s'ob- 
tient par £'-=-63-k+64=-127-k d'où L3-L2'+128=-255-Kk. 


Exercice 7.9 


C'est le piège ! Faites donc PAPER 3 et non 
CURSET ÿ9,9,9:FILL 299,1,19 


Exercice 7.10 


PAPER 4:CURSET 89,9,0:FILL 299,1,23:CURSET 169,9,9:FILL 
299,1,17 


172 


LA DECOUVERTE DE L'ORIC 


Exercice 7.11 


19 HIRES:REM vide l'écran 
29 CURSET #,9,9:FILL 199,49,942 
39 CURSET #,199,9:FILL 199,49,54 


Pour des motifs, il faut spécifier toutes les colonnes 
à remplir. 


Exercice 7.12 


I1 faut cette fois inscrire des motifs pleins (code 63). 
Puis, en 79 on met les attributs de clignotement. 


14 HIRES + PAPÉR Bt IE 4 






A pe LU te À AAA 


7 CURSET ARE, 6, Ge FILLES, À, LE 


Exercice 8.1 


On joue le la 3 du diapason. 4ÿ# attend qu'on appuie sur 


une touche quelconque pour arrêter le son s'il est con- 
tinu. 


Exercice 8.2 


19 MUSIC 1 
29 MUSIC 2 
39 MUSIC 3 
49 PLAY 7, 


S- + - 
js ee 
Hs « = 


Exercice 8.3 


On ajoute les instructions ci-dessous. 18ÿ est modifié. 
NF est le tableau des fréquences, NO celui des octaves 
et ND celui des durées. 









GATE GR, à 
41 FÜR Het TO 
4e FÜR : 

186 CLE 
SAGE FÜR He TT 





26 









ÊE HOCH: 
M CGOSUE 





173 


LA DECOUVERTE DE L'ORIC 


Exercice 8.3 (suite) 


2@14 MUSIC 1:HOCMO.HFCHS, 19 
2424 FOR £s1 TO MODEMS :MEXT 

SGSA MUSTÉE 1, NOCMNO, MFÉOMO, QE HEXT 
sg4f PLAYA. 6,8, 84: RETURH 


Exercice 8.4 
JEU "SIMOH" 


DATA 1:66, JE LE 

FÜR Mel TO P:REACD HFEMOEHEXT 

CLS: PAPER G:INE 

FOR Il TO 4 

SE HSE TI eTIMTE 147 #RMDE 1 HS: HEXT 

sa FÜR Isi TO 4 

75, PAPER MECT à 

ag MUSIC 1,4, HPCMECT 15, 18 

a FÜR Zei TO AGB:ME#XT 

LA MUSIC 1,4 SG MERT 

Li Tel: PAPER & 

184. FÜR Isi TO 4 

134 GET A$ 

148 SHCT eASCE RAS 1-S 

LS MUSTE 1,4. HPFESMET 4 1: PAPER SHET 

168 FÜR € TO SRG HET 

174 MSIE 1,4, 8 G:MEXT 

189 BIEH=-1L: PAPER G:CLE 

134 FÜR Iei TO 4 

EG BIEMSBIEN AND CHE T es T1 HEXT 

IF BIEN THEH FEIMT "G E":GOTO Ædlf 

IF Tef THEN PEIHT E ATES "M: Tel: GOTO EE 
FRINT "PERDU C'ETAIT "à 

FOR Iel TO 4: FETNT Ai 
LHPUT "OM RECOMMENCE 
SD IF Se "QUI" GOT SA 


















MEET PRTMT 





NS est la séquence préparée par l'ordinateur, tandis que 
SN est celle proposée par le joueur. Remarquez la va- 
riable logique BIEN et sa gestion. Bien entendu, vous 
pouvez apporter des variantes : nombre de notes par sé- 
quence et nombre de tentatives variables, possibilité 

de réentendre la séquence, traitement du cas où le jou- 
eur tape sur une autre touche que 1 à 7. 


174 


LA DECOUVERTE DE L'ORIC 


BIBLIOGRAPHIE 


LIVRES 


Systèmes à Microprocesseurs 
par Daniel-Jean David (Editests) 


Programmer en Basic 
par Michel Plouin (Editions du P.S.I) 


Jeux, trucs et comptes pour PET/CEM 
par Michel Benelfoul (Editions du P.S.I) 


ORIC pour tous (ORIC-1 et ORIC-ATMOS) 
par Jacques Boisgontier et Sophie Brebion 
(Editions du P.S.I.) 


52 programmes pour tous, ORIC-1 et ATMOS 
par Jacques Boisgontier (Editions du P.S.I.) 


REVUES 


L'Ordinateur Individuel 
39, rue de la Grange aux Belles - 75010 PARIS 


- La Commode, le magazine des ordinateurs Commodore, 


Atari et ORIC 
28, rue Vicq-d'Azir - 75010 PARIS 


MICR'ORIC 


175 


Achevé d'imprimer en mars 1984 
sur les presses de l'imprimerie Laballery et C° 
58500 Clamecy 
Dépôt légal : mars 1984 


N° d'impression : 402056 
N° d'édition : 86595-109-3 
ISBN : 2-86595-109-X 












EDITIONS DU PSI 
l'PSL DIFFUSION 


9500) 


la découverte de l’ORIC 


L'ORIC est un ordinateur individuel qui permet 
à la fois des applications sérieuses et les jeux. Ce 
livre d'initiation couvre les deux aspects. Il ne 
nécessite pas de connaissances préalables. Après 
une introduction formée de rappels généraux sur 
l'informatique, il comprend essentiellement une 
présentation progressive du langage Basic. La décou- 
verte du langage est conduite en bâtissant des pro- 
grammes par améliorations successives au cours 
desquelles les notions nouvelles s’introduisent naturel- 
lement. On aborde spécialement les points forts de 
l'ORIC : graphiques, sons, couleurs, horloge. La délicate 
question des attributs est rendue compréhensible de façon 
très claire. 





























EDITIONS DU PS.I. 
BP 86 


71402 lagny-sur-marne cedex 
ISBN 2.86595.109.X 


imprimé en France 







sl à la découverte de l'ORIC